C 容器的拷貝注意細節

2021-07-08 09:03:14 字數 948 閱讀 9504

為了建立乙個容器為另乙個容器的拷貝,兩個容器的型別以及元素型別必須匹配。當傳遞引數為兩個迭代引數用來拷貝時,就不需要容器型別是相同的了,而且嚴肅型別也不要求是相同的,只需要將考別的嚴肅轉換為對應的元素型別即可。如圖中例項:

c為一容器,c= 將c種元素替換為初始化列表中的資料,但是對array不適用。

採用swap函式交換兩個容器的元素時,對vector等元素不會移動,故其迭代器仍然有效,且減緩時間非常快,是乙個常熟時間,但是對array的swap函式就會真正交換他們的元素,故交換時間與他們所含元素的數量成正比,交換後迭代器指向的已經是另乙個array中所指向的元素了。即指向的值發生了改變。

swap函式有層原函式版本和非成員函式版本,推薦非成員函式版本,即swap(c1,c2);版本。

當我們用乙個物件來初始化容器時,或者將乙個物件插入到容器中時,司機上放入容器的是物件的拷貝,而不是物件本身,這與我們將物件傳遞給非引用引數一樣,對容器中元素的修改不會影響到原始物件。

解引用c.end()–才能夠得到容器最後乙個元素,c.end()指向的是最後乙個元素的後乙個位置。

at()操作只支援vector、deque、array、string不支援list。可以這樣裡理解,at為隨機訪問,而list為鏈式儲存,故不支援。

當進行大多數操作時,容器的尾後迭代器都會失效,故不要儲存end返回的迭代器,而應該每次處理完相應的模組後均從新定位尾後迭代器。否則會產生災難性後果。如下**:

//不安全,迭代器失效

auto beg = v.begin();

auto end = v.end();

while(beg!= end)

//正確的寫法

while(beg!= v.end())

C 拷貝建構函式的幾個細節

關鍵字 c 拷貝建構函式是c 最基礎的概念之一,大家自認為對拷貝建構函式了解麼?請大家先回答一下三個問題 1.以下函式哪個是拷貝建構函式,為什麼?x x const x x x x x x x int a 1 x x x int a 1,b 2 2.乙個類中可以存在多於乙個的拷貝建構函式嗎?3.寫出...

C 拷貝建構函式的幾個細節

拷貝建構函式是c 最基礎的概念之一,大家自認為對拷貝建構函式了解麼?請大家先回答一下三個問題 1.以下函式哪個是拷貝建構函式,為什麼?x x constx x x x x x x int a 1 x x x int a 1,b 2 2.乙個類中可以存在多於乙個的拷貝建構函式嗎?3.寫出以下程式段的輸...

C 拷貝建構函式的幾個細節

關鍵字 c 拷貝建構函式是c 最基礎的概念之一,大家自認為對拷貝建構函式了解麼?請大家先回答一下三個問題 1.以下函式哪個是拷貝建構函式,為什麼?x x constx x x x x x x int a 1 x x x int a 1,b 2 2.乙個類中可以存在多於乙個的拷貝建構函式嗎?3.寫出以...