順序容器 容器的賦值 swap assign

2021-06-29 07:02:23 字數 1926 閱讀 2451

一、clear和erase函式會把容器的實際大小減少。

void test_clear_erase()

std::cout

<< de.size() << std::endl;//5

de.erase(de.begin(),de.end());

std::cout

<< de.size() << std::endl;//使用clear和erase函式後,容器大小變為0

}

二、容器的賦值「=」操作

// 測試複製操作符:

void test_assignment()

三、順序容器的賦值操作

c1 = c2

刪除容器 c1 的所有元素,然後將 c2 的元素複製給 c1。c1 和c2 的型別(包括容器型別和元素型別)必須相同

c1.swap(c2)

交換內容:呼叫完該函式後,c1 中存放的是 c2 原來的元素,c2 中存放的則是 c1 原來的元素。c1 和 c2 的型別必須相同。該函式的執行速度通常要比將 c2 複製到 c1 的操作快

c.assign(b,e)

重新設定 c 的元素:將迭代器 b 和 e 標記的範圍內所有的元素複製到 c 中。b 和 e 必須不是指向 c 中元素的迭代器

c.assign(n,t)

將容器 c 重新設定為儲存 n 個值為 t 的元素

四、測試assign

assign 操作首先刪除容器中所有的元素,然後將其引數所指定的新元素插入到該容器中。與複製容器元素的建構函式一樣,如果兩個容器型別相

同,其元素型別也相同,就可以使用賦值操作符(=)將乙個容器賦值給另乙個容器。如果在不同(或相同)型別的容器內,元素型別不相同但是

相互相容,則其賦值運算必須使用 assign 函式。例如,可通過 assign 操作實現將 vector 容器中一段 char* 型別的元素賦給 string 型別 list 容器。

由於 assign 操作首先刪除容器中原來儲存的所有元素,因此,傳遞給 assign 函式的迭代器不能指向呼叫該函式的容器內的元素。

void test_assign()

五、測試swap:使用swap 操作以節省刪除元素的成本

swap 操作實現交換兩個容器內所有元素的功能。要交換的容器的型別必須匹配:運算元必須是相同型別的容器,而且所儲存的元素型別也必須相同。呼叫了 swap 函式後,右運算元原來儲存的元素被存放在左運算元中,反之亦然該操作不會刪除或插入任何元素,而且保證在常量時間內實現交換。由於容器內沒有移動任何元素,因此迭代器不會失效。

void test_swap()

std::deque

::iterator it_de1 = de1.begin();

std::deque

de2;

de2.push_front("aaa");

de2.push_front("bbb");

de2.push_front("ccc");

std::deque

::iterator it_de2 = de2.begin();

std::cout

<< *it_de1 << std::endl;//0

std::cout

<< *it_de2 << std::endl;//ccc

de1.swap(de2);//交換

std::cout

<< *it_de1 << std::endl;//0

std::cout

<< *it_de2 << std::endl;//ccc

print_deque(de1);//ccc_bbb_aaa_

print_deque(de2);//0_1_2_3_4_

}

容器 順序容器

容器 include include include 容器元素型別必須滿足 1.支援賦值運算 2.物件可以複製 而io庫型別這兩個都不支援,因此,不能建立存放io型別物件的容器 容器的容器 記得加空格 list vector a list容器迭代器不支援演算法運算 也不支援關係運算 等,它只有自增,...

容器 順序容器 關聯容器

容器分為 順序容器 關聯容器,示意圖如下 順序容器 只儲存值,關聯容器 key value形式,關聯容器的乙個元素包含兩個部分 鍵值對 key value 有序容器 底層實現為紅黑樹,即容器內的key是有序的 無序容器 底層實現為hash table,雜湊表 區別 順序容器通過元素在容器中的位置順序...

stl容器之順序容器

stl容器分為順序容器和關聯容器 其中順序容器最常用的由vector,list,queue 1.vector vector 向量容器,可以看作變長陣列,長度可根據需要自行變化。使用的標頭檔案 include 定義方式 vector陣列名 vectorar 訪問容器內資料的方式和普通陣列相同,可以用a...