關於vector的一些問題(5 11)

2021-08-23 15:05:35 字數 1012 閱讀 3673

這兩天,我進行到huffman編碼。首先是建立huffman樹。我用的是vector來存放樹的節點。樹的節點node包含資料(data),左孩子(lch),右孩子(rch),父親(parent)。在建立樹我用的是這個函式:

//p= tree.begin();在構造huffman樹的時候,一開始定義並賦值,之後p的位置沒有變過,僅僅是用的取

//出其中 的內容。

//pos1,pos2是要組裝的兩個子節點,end是構成的父節點的位置。(這邊的位置都是下標位置)

void addnode(node *p,int pos1,int pos2,int end)

這個函式初看沒有什麼問題,但是當我除錯的時候,發現:當我pos1=8,pos2=9的時候,執行tree.push_back(node);之前所以資料都沒有問題,但是執行這一句之後,p[pos1],p[pos2]中放的是沒有初始化的資料,這時候的p[end]是沒問題的。(然後,使得結束判斷出錯,得到了非預想的結果。)

我試了好多次,都是這個結果。後來,我估計是因為重新分配空間了。但是,重新分配空間的話,原來的資料應該拷貝到新的空間啊?別無他法,有就試著把 p 換成了 tree(p[pos1]->tree[pos1])。然後其他地方做了相應的修改,發現取得了預想的效果。

那麼,到底**出現問題了呢??我分析了一下。首先,肯定是vector重新分配空間了,在那個過程中出錯了。有對比了一下先後的**,發現把 p 換成 tree之後,就沒問題了。那麼,就是 p 的指向的地方有問題。

想了一下 p 指向的地方:p= tree.begin(); 對了,空間重新分配後, tree.begin()變了,而 p 還是指向原來的地方——已經釋放掉的地方,所以資料就沒有初始化了。而給用tree之後,tree在重新分配空間之後,也隨之換了。接下來,一切都對了。。。

函式但中傳指標出了問題,那麼怎麼預防呢?

大家都可以來討論一下。

我覺得,要麼,就不要傳遞指標,直接傳遞vector;要麼,就不要讓指標所指向的內容在函式執行過程發生變化,比如說push_back(x);

暫時想到這麼多。

關於面試的一些問題

面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...

關於Labview的一些問題

第一章 虛擬儀器及 labview入門 1 虛擬儀器概述 虛擬儀器 virtual instrumention 是基於計算機的儀器。計算機和儀器的密切結合是目前儀器發展的乙個重要方向。粗略地說這種結合有兩種方式,一種是將計算機裝入儀器,其典型的例子就是所謂智慧型化的儀器。隨著計算機功能的日益強大以及...

關於DropDownList的一些問題

dropdownlist選擇後提示不能在dropdownlist選擇多項 原因在於drop.selected true 用的是item的引用,無法覆蓋上次操作 有2種方法 一種是直接drop.selectvalue value 選定指定資料 另一種是在操作前 呼叫clearselection 方法清...