vector中的拷貝操作

2021-10-07 11:54:35 字數 926 閱讀 9131

vector中的拷貝操作中會給傳入物件開闢新的空間,並將這個物件賦值給新空間的物件。

class string 

~string()

private:

char* m_data;

};// 上面自定義類型別中含有指標變數,但是沒有自主定義拷貝建構函式,呼叫預設建構函式的時候是進行淺拷貝操作,因此下面vector中的string變數中的m_data指標跟str變數中的m_data指標是指向同乙個位址,析構的時候會delete兩次,發生錯誤。

// g++中下面程式並沒有報錯,但是vs2008會報錯

int main()

cout << "end" << endl;

return 0;

}

int main() 

cout << vec[0] << endl;

cout << "end" << endl;

// 需要手動釋放vector指標指向的空間

for (auto iter = vec.begin(); iter != vec.end(); ++iter)

}// 清空vector資料並釋放空間

vec.clear();

return 0;

}// 輸出結果,發現vec內的指標變數跟str指向同乙個位址,vector只是拷貝了指標變數的大小

/** string construct

* 0x55826c3f4e70

* 0x55826c3f4e70

* end

**/

如圖可見,vector僅僅是拷貝指標變數的大小。

c 中vector的拷貝構造過程

vector的底層是用動態陣列來儲存的,當我們用vectorvect 這樣的形式宣告的時候,陣列的長度是0,當我們插入第乙個元素的時候,陣列的長度會變為1,當插入第二個的時候,陣列長度會變為2,當插入第三個元素的時候,陣列長度變為4,當插入第三,第四個元素的時候,陣列長度不變,當插入第五個的時候,陣...

vector拷貝複製方法

vector宣告初始化,方法很多,我們這裡不展開來說,使用最基本的方法 vector int link 宣告vector物件 link.push back 1 初始化 link.push back 2 vector複製 拷貝辦法歸結下來有以下幾種方法。vector item link 使用已定義的l...

C 中vector的基本操作

建立乙個空的 vector vectorv 新增元素 注意 push back 和pop back只能在尾部新增和刪除,不能操作頭部 v.push back 3.1415926 v.push back string adiabatic 刪除元素 pop back v.pop back 3.14159...