順序容器(上)

2021-07-29 12:57:30 字數 3405 閱讀 7554

#include //c++11 陣列型別

#include //雙向鍊錶,插入刪除速度快,不支援隨機訪問

#include //c++11 單向鍊錶,單向訪問,插入刪除速度快,不支援隨機訪問,沒有size操作

#include //雙端佇列,支援快速隨機訪問

#include //插入刪除耗時

#include //插入刪除耗時

初始化(除array皆可用)

vectorvec;    //預設初始化 

vectorvec(10);//10個都是0的元素

vectorvec1(10, 1);//10個都是1的元素

vectorvec;

注意花括號和括號的區別

vectorvec;//10個元素 

vectorvec;//10個都是"hi"的元素

ivec的元素型別要能夠隱式轉換為vec的元素型別

vectorvec(ivec); //複製  

vectorvec(ivec.begin(), ivec.end());//複製指定範圍

迭代器1.迭代器之間的加減,自加自減運算

2.大小比較(只限vector和string)

#include string::iterator//讀寫

string::const_iterator//唯讀

vector::iterator//讀寫

vector::const_iterator//唯讀

auto it = s1.begin();auto it = s1.end();

string::const_iterator//唯讀

auto it = s1.cbegin();auto it = s1.cend();

函式

for (auto ix = ivec.begin(); ix != ivec.end(); ++ix)

//此處不該為int 用!=,而不用<=

*ix = 0; //將各個元素賦值為0

while (iter != vi.end()) {}//每次迴圈後需要重新確定尾後迭代器的位置
vector::iterator find1(vector::iterator a, vector::iterator b, int c)//可以用decltype(s1.begin()) 

return b;//未找到的情況,返回最後乙個迭代器

}

操作

vec1 = vec2;//用等號複製型別必須相同

/*拷貝容器來進行新建的容器型別必須相同*/

vectors1 = ;

vectors2(s1);//無法轉換

/*拷貝容器範圍來進行新建的容器型別只要可以相互轉換*/

vectors2(s1.begin(), s1.end());

swap(vec, vec1);//不用加點的版本

/* 交換後vec1有5個元素,vec1有10個元素

原來指向vec的指標會指向ivec

交換的是整個容器內容

可以認為交換的是容器的名字

對string使用會使迭代器失效

對於array使用交換的是元素內容,引用和迭代器不會失效

*/ivec3.assign(ivec4.begin(), ivec4.end());

ivec3.assign(10, 11);//10個11

ivec3.assign();

/* 除array之外

swap的型別要求相同

assign只要求相容(例如char*轉化為string)

先定義後使用

*/vec.empty();

/*forward_list無法使用*/

vec.size();/*返回為unsigned型,string::size_type*/

/*

array和forward_list無法使用

使用以下插入函式只有list的引用和迭代器不會失效

vector,string,deque需要更新迭代器

插入的是物件的拷貝,而不是物件本身

*//*返回void*/

//在while迴圈中記得+2

vec.push_back();

vec.push_front();//vector和string不支援

vec.emplace_back();

vec.emplace_back(171,"meiyouren");//根據內容呼叫相應的建構函式

il.emplace_front(171, "meiyouren");//除vector和string

iter = il.insert(iter, p1);/*在iter之前插入1個元素,返回指向新元素的迭代器*/

/* 指向原來的下乙個元素要+2

vector(除了末尾),string,deque使用插入的速度很耗時

*/vec2.insert(iter2, 3, 10);//迭代器位置之前插入n個t元素

ivec3.insert(iter3, ivec2.begin(), ivec2.end());//迭代器位置之前插入另乙個型別相同容器迭代器範圍內的元素

ivec4.insert(ivec.begin(), );

訪問

//返回引用

int a = vec1.front();

int b = vec1[0];/*返回為unsigned型,string::size_type

forward_list和list不能用下標運算*/

int c = vec1.at(0);

刪除

/*

不適用於array

刪除deque中除首尾位置之外的任何元素都會使所有迭代器,引用指標失效

如有需要請先儲存

*/vec.pop_back(); /*刪除尾元素,返回void除forward_list*/

vec.pop_front(); //除vector和list

vec.erase(iter) //刪除迭代器p指向的元素,返回被刪除元素的下乙個元素的迭代器

vec.erase(iter1,iter2) //刪除迭代器(b, e)範圍內的元素,返回e的下乙個元素的迭代器

vec.clear() //刪除c中所有的元素

容器 順序容器

容器 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...