C 中引用vector中元素會出現的問題

2021-10-09 07:24:15 字數 1755 閱讀 9625

/*

* @description:

* @author: szq

* @github:

* @date: 2020-08-18 16:11:29

* @lasteditors: szq

* @lastedittime: 2020-08-18 16:16:51

* @filepath: \cpp\src\test.cpp

*/#include

#include

using

namespace std;

intmain()

;int

&num = nums[0]

; cout <<

"引用修改前nums[0] = "

<< nums[0]

<< endl;

cout <<

"引用修改前引用num = "

<< num << endl;

num =2;

cout <<

"引用修改後nums[0] = "

<< nums[0]

<< endl;

cout <<

"引用修改後引用num = "

<< num << endl;

}

執行後結果為:

從上面的結果使用引用來修改vector中的值確實可以成功。但是這種情況是發生在vector儲存空間沒有發生改變的情況下,如果在儲存空間發生改變的情況下就會出現問題。如下:

/*

* @description:

* @author: szq

* @github:

* @date: 2020-08-18 16:11:29

* @lasteditors: szq

* @lastedittime: 2020-08-18 16:16:51

* @filepath: \cpp\src\test.cpp

*/#include

#include

using

namespace std;

intmain()

;int

&num = nums[0]

; cout <<

"引用修改前nums[0] = "

<< nums[0]

<< endl;

cout <<

"引用修改前引用num = "

<< num << endl;

num =2;

nums.

push_back(4

);cout <<

"引用修改後nums[0] = "

<< nums[0]

<< endl;

cout <<

"引用修改後引用num = "

<< num << endl;

}

執行結果為:

從上面可以看出使用push_back後引用的物件不對。這是因為在使用push_back後引起了vector的擴容,它會重新分配乙個更大的記憶體,然後將原來vector中的元素拷貝過去,最後會釋放掉原來vector的記憶體。這就導致了原來引用指向的物件被銷毀,引用指定的物件不明確。

C 之vector中元素刪除

今天在刪除vector中的元素中遇到乙個問題,這裡記錄下來以便以後查閱。預備知識 用到了erase 函式,對於乙個容器c來說,假設迭代器為p,那麼執行 c.erase p 之後就刪除了容器c中p所指向的元素,並且返回乙個迭代器,返回的迭代器指向剛才所刪除元素後面的乙個元素 這裡是關鍵 有了上面的知識...

結構體中元素引用 「 「 與 「 「

自從了解結構體這個型別後,相信有不少人和我一樣對於 和 何時使用哪個來引用目標結構體中元素感到混淆,今天還是把他寫下來,以後再忘了自己也可以來看看。首先我們宣告乙個結構體。typedef structparksystem 接下來在main函式中直接建立結構體變數,parksystem p parks...

inline block中居中元素

luo 有這樣乙個父元素,被顯示為inline block元素,那問題是,如何居中裡面的元素呢?先看看父元素的樣式 a設定了元素內居中,這個設定只會水平居中,下面進行垂直居中 a before b注意到了嗎?我們使用的是vertical align屬性,設定成middle。但是問題來了,僅僅設定成這...