C 雜記 STL容器當作引數傳遞

2021-08-10 23:50:18 字數 725 閱讀 5219

常見的stl容器包括:vector,deque,list,set,multiset,map,multimap,stack,queue,priority_queue。

將stl容器當作引數傳遞給函式時,如果是值傳遞,則會自動呼叫stl容器的拷貝建構函式,如下面的程式片段。

[cpp]

view plain

copy

vector<

int> a;  

...  

void

function(vector<

int> a)   

//即使function中改了a的值,此處a沒有任何變化

vector的拷貝建構函式會根據傳進來的vector開闢相同的空間,然後將傳進來的vector的元素乙個乙個拷貝到新的vector中。在逐個拷貝元素的過程中,如果該元素不是int型,而是乙個自定義的類,那麼必須使用該自定義的類的拷貝建構函式。那麼,此時是否為深拷貝,取決於該自定義的類是否重寫了拷貝建構函式。(關於stl容器內元素的拷貝問題,見引用1)

除了stl容器外,string類自帶的拷貝建構函式也是深拷貝。

值傳遞示意圖:

引用傳遞示意圖:

C 容器(STL容器)

容器 container 用於存放資料的類模板。可變長陣列 鍊錶 平衡二叉樹等資料結構在stl中都被實現為容器。在使用容器時,即將容器類模型例項化為容器類,會指明容器中存放的元素是什麼型別。容器可以分為兩大類 順序容器和關聯容器 順序容器有可變長動態陣列vector 雙端佇列deque 雙向鍊錶li...

STL容器的元素型別傳遞測試

stl的容器模板類在新增元素的時候,採用拷貝構造,並且是淺拷貝,而不是直接傳遞指標,這意味這系統要多開闢一塊記憶體來滿足容器的使用。如果要正確使用stl容器對各種物件操作要注意過載拷貝建構函式,也就是變成深拷貝。測試 使用到了vector向量,而每次他都呼叫當前元素相應個數的析構以及拷貝構造。這其中...

C 學習 STL容器

vector 向量 線性容器 用標準模板,記得加上相應的標頭檔案 include include using namespace std int main 設定向量容量 初始化 v1 0 8 v1 1 8 v1 2 8 宣告迭代器 標準他屬於那個模板 vector iterator v1 iter ...