關於指標的乙個小問題

2021-06-22 14:57:29 字數 1255 閱讀 1940

任務:

(《c++ primer  4th》習題5.18)編寫程式定義乙個vector物件,其每個元素都是指向string型別的指標,讀取該vector物件,輸出每個string的內容及其相應的長度。

自己的方法:

string s;

string sarr[10];

//vector內的每個元素都是指向string型別的指標,這樣定義vector

vectorpvec;

cout< sarr[i];

for(string *p = sarr ; p != sarr+10; ++p)

pvec.push_back(p);

for(vector::iterator ix = pvec.begin(); ix != pvec.end(); ++ix)

for(vector::iterator iter = psvec.begin() ; iter != psvec.end() ; ++iter)

cout<

delete *iter

結果:輸入my name is zhao lei,執行結果為:

分析讀取vector物件時為什麼要用new:

如果把答案中讀取vector物件的部分寫成:

while(cin>>str)

輸入my name is zhao lei。則輸出結果如下,即將最後乙個字元輸出了psvec.size()次。

分析原因:string *pstr ;pstr = &str ;這兩個語句的作用是定義了乙個野指標pstr,然後把str的位址賦給了它。然而str在記憶體中只有一塊位址,在每一次讀取資料的時候是不斷被賦值改變的,所以每一次str的內容都被下一次的內容覆蓋,最後的結果就是所有的指標都指向了同乙個str,且str中的內容為最後乙個string物件,這就是出現上述結果的原因。

而答案中的方法,每一次從輸入快取中讀取資料的時候都用string *p = new string;這個語句為指標p開闢了一段記憶體空間,然後將輸入的值賦給該指標所指向的記憶體單元。最終的結果是,輸入了多少個string物件就有多少個指標,且每個指標指向定義時為自己開闢的記憶體單元,因此vector中儲存的是指向每個string物件的指標。因此必須採用答案中的方法。 

關於Jsoup的乙個小問題

利用jsoup可以實現對網頁資訊進行有效解析和提取,例如有網頁內容如下 hello,jsoup jsoup的官方 利用jsoup提取標籤的內容,如下 document doc null trycatch ioexception ioe 提取標籤的內容 string strtitle doc.sele...

乙個關於選擇的小問題

以前看過這樣乙個問題 乙個人參加有獎答題,主持人給出了a b c三個選項。這個不知道問題的答案,就隨便選了乙個選項。然後主持人排除了剩下兩個答案中的乙個,告訴這個人有一次改變自己選項的機會。請問 這時候這個人該不該改變自己的選項?剛看到這個問題,我的第一反映是完全沒必要,因為既然排除了乙個錯誤選項,...

乙個小問題

error c2679 binary no operator defined which takes a right hand operand of type class smanip int or there is no acceptable conversion 除錯了好久,就是找不出問題在哪。...