1. 程式人生 > >容器vector和list基本函式

容器vector和list基本函式

建構函式

語法:

vector <string> v1(10,"a");     //建立型別為srting的容器,個數為10,內容為a,內容數量可省略

vector <string> v2(v1);         //建立一個和V1一樣的容器

vector <string> v3{"a","b","c","d"};    //建立一個容器且,全部初始化

vector <string> v4;             //建立一個空白容器

vector <string>::iterator itr;     //建立一個指向的迭代器

vector <string> v5(v1.begin(),v1.end()-8,v1.get_allocator());     //建立一個容器,使用開始和結尾的地址

vector <int> v6(10,6);

C++ Vectors可以使用以下任意一種引數方式構造:

無引數 - 構造一個空的vector,

數量(num)和值(val) - 構造一個初始放入num個值為val的元素的Vector

vector(from) - 構造一個與vector from 相同的vector

迭代器(start)和迭代器(end) - 構造一個初始值為[start,end)區間元素的Vector(注:半開區間).

運算子

語法:

v1 == v2

  v1 != v2

  v1 <= v2

  v1 >= v2

  v1 < v2

  v1 > v2

  v[]

C++ Vectors能夠使用標準運算子: ==, !=, <=, >=,<, 和 >. 要訪問vector中的某特定位置的元素可以使用 [] 操作符.

兩個vectors被認為是相等的,如果:

它們具有相同的容量

所有相同位置的元素相等.

vectors之間大小的比較是按照詞典規則. (a>A)

語法:

v4.assign(v2.begin(),v2.end());                

   //assign會從後面的指標中從頭到尾的複製資料

v4.assign(1,"d");                             

   //會從第一個位置複製制定個數的元素

assign() 函式要麼將區間[start, end)的元素賦到當前vector,或者賦num個值為val的元素到vector中.這個函式將會清除掉為vector賦值以前的內容.

at函式

語法:

cout << "v2 = " << v2.at(i) << endl;       

//at(i)會指向第i個位置的值,比直接a[i]安全。at()有邊界保護

at() 函式 返回當前Vector指定位置loc的元素的引用. at() 函式 比 [] 運算子更加安全, 因為它不會讓你去訪問到Vector內越界的元素.

begin-end 函式

語法:

for(itr = v1.begin();itr != v1.end();itr++)     //使用迭代器指向v1,然後開啟迴圈

    {                                //begin()指向起始元素的地址

        cout << "vi = " << *itr << endl;    //end()指向vector末尾元素的下一位置,

        *itr += 65;                    //注意,如果你要訪問末尾元素,需要先將此迭代器自減1.

        cout << "vi = " << *itr << endl;    //使用字串會在值後面再加一個數值,數值等於加的值,使用int不會

    }

begin()函式返回一個指向當前vector起始元素的迭代器.

end() 函式返回一個指向當前vector末尾元素的下一位置迭代器.注意,如果你要訪問末尾元素,需要先將此迭代器自減1.

語法:

v4.capacity();                                

 //返回當前vector在重新進行記憶體分配以前所能容納的元素數量.

capacity() 函式 返回當前vector在重新進行記憶體分配以前所能容納的元素數量.

clear 函式

語法:

v4.clear();                                    

//刪除當前vector中的所有元素.

clear()函式刪除當前vector中的所有元素.

empty 函式

語法:

b = v4.empty();

cout << "v4.empty? " << b << endl;     

//判斷容器是否為空,為空返回1,否則返回0

如果當前vector沒有容納任何元素,則empty()函式返回true,否則返回false.例如,以下程式碼清空一個vector,並按照逆序顯示所有的元素:

while( !v.empty() ) {

    cout << v.back() << endl;

    v.pop_back();

 }

erase 函式

語法:

v3.erase(v3.begin(),v3.end()-3);                //刪除指定區間的數值

v3.erase(itr = v3.begin());                     //刪除制定位置的數值

erase函式要麼刪作指定位置loc的元素,要麼刪除區間[start, end)的所有元素.返回值是指向刪除的最後一個元素的下一位置的迭代器.

front-back 函式

語法:

cout << "v3.front = " <<v3.front() << endl;     //front()會指向起始位置的數值

cout << "v3.end = " << v3.back() << endl;       //back()會指向最後位置的數值

front()函式返回當前vector起始元素的引用

back() 函式返回當前vector最末一個元素的引用

語法:

allocator_type get_allocator();

get_allocator() 函式返回當前vector的記憶體分配器.

語法:

v5.insert(v5.begin(),"qw");                     //在某一位置前插入一個數值,

v5.insert(v5.end(),3,"w");                      //在某一位置前插入n個位置

v5.insert(v5.begin(),v1.begin(),v1.end());      //在某一位置前插入另一一段地址的所有值

insert() 函式有以下三種用法:

在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器,

在指定位置loc前插入num個值為val的元素

在指定位置loc前插入區間[start,end)的所有元素 .

語法:

int a = v1.max_size();                          //最大的可能的元素個數.

max_size() 函式返回當前vector所能容納元素數量的最大值(譯註:包括可重新分配記憶體).

語法:

v5.pop_back();                              //刪除最後一個元素

pop_back()函式刪除當前vector最末的一個元素, vector<char>alphaVector;

語法:

v5.push_back("a");                       //在最後面插入一個值

push_back()新增值為val的元素到當前vector末尾

語法:

rbegin函式返回指向當前vector末尾的逆迭代器.(譯註:實際指向末尾的下一位置,而其內容為末尾元素的值)

rend 函式

語法:

cout << *v6.rend()-1 <<endl;             

//返回指向當前vector末尾的逆迭代器,實際指向末尾的下一位置,而其內容為末尾元素的值

rend()函式返回指向當前vector起始位置的逆迭代器.

語法:

v6.reserve(10);                             

//當前vector預留至少共容納size個元素的空間.(譯註:實際空間可能大於size)

reserve()函式為當前vector預留至少共容納size個元素的空間.(注:實際空間可能大於size)

語法:

v6.resize(18,10000);                       

//擴充為制定大小,但是不能比resize小,

resize() 函式改變當前vector的大小為size,且對新建立的元素賦值val

size 函式

語法:

for(i = 0;i < v5.size() ;i++)              

//size() 函式返回當前vector所容納元素的數目

size() 函式返回當前vector所容納元素的數目

swap 函式

語法:

v5.swap(v1);

//交換兩個容器的數值

swap()函式交換當前vector與vector from的元素

本質上還是呼叫了rease,remove_if是將要刪除的東西排到後面,並指向第一個刪除的位置

list

list是一個能夠存放任意型別的雙向連結串列

建構函式:

string arr[3] = {"abc","bcd","efg"};

list <string> L1;             //建立一個空的list連結串列

list <string> L2(10);         //建立一個元素個數為10的list連結串列

list <string> L3(10,"abc");   //建立一個元素個數為10的,內容為“abc”的list連結串列

list <string> L4(L3);         //建立一個和L3一樣的list連結串列

list <string> L5(arr,arr+3);  //利用陣列建立一個的list連結串列

list <string>::iterator itr;  //建立一個迭代器

語法:

L2.assign(L3.begin(), L3.end());        //利用L3給L2賦值

L2.assign(6,"a");                     //給連結串列從開始位置賦n個值,會覆蓋之前數值

assign()函式以迭代器start和end指示的範圍為list賦值或者為list賦值num個以val為值的元素。

語法:

cout << "L5.front = " << L5.front() << endl;    //指向最開始的元素

cout << "L5.back = " << L5.back() << endl;      //指向最末尾的元素

front()函式返回一個引用,指向連結串列的第一個元素。

back()函式返回一個引用,指向list的最後一個元素。

語法:

cout << "L2 = ";                        //給連結串列從開始位置賦n個值,會覆蓋之前數值

for( itr = L2.begin(); itr != L2.end(); itr++ )   //迭代器begin指向連結串列開始地址

cout << *itr << " ";                      //迭代器end指向連結串列末尾地址

begin()函式返回一個迭代器,指向list的第一個元素。

end()函式返回一個迭代器,指向連結串列的末尾(並不是最後一個元素)。

clear

語法:

L5.clear();                             //清空列表

clear()函式刪除list的所有元素。

empty

語法:

cout << "L5 = empty? " << L5.empty() <<endl;    

//判斷連結串列是否為空,為空返回1,不空返回0  

erase

語法:

L5.erase(L5.begin());                   //刪除某一個位置的數值 

L5.erase(L5.begin(),L5.begin()end );      //刪除從begin到end的數值

erase()函式刪除以pos指示位置的元素, 或者刪除startend之間的元素。 返回值是一個迭代器,指向最後一個被刪除元素的下一個元素。

語法:

allocator_type get_allocator();

get_allocator()函式返回連結串列的配置器。

語法:

L5.insert(L5.begin(),"start");           //指定位置插入一個數值

L5.insert(L5.begin(),6,"qwer");         //指定位置插入N個數值 

L5.insert(L5.begin(),L4.begin(),L4.end );  //指定位置插入另外一個連結串列的數值

insert()插入元素val到位置pos,或者插入num個元素val到pos之前,或者插入start到end之間的元素到pos的位置。返回值是一個迭代器,指向被插入的元素。

語法:

cout << "L5.max_size() = " << L5.max_size() << endl;    //返回可儲存的最大個數

max_size()函式返回連結串列能夠儲存的元素數目。

merge

語法:

L5.merge(L4);                           //將L4和L5排列成一個連結串列。L4在前  L5.merge( L4, Comp compfunction );

merge()函式把自己和lst連結串列連線在一起,產生一個整齊排列的組合連結串列。如果指定compfunction,則將指定函式作為比較的依據。

語法:

L5.pop_front();                         //刪除最開始位置的元素

L5.pop_back();                          //刪除最末尾位置的元素

pop_back()函式刪除連結串列的最後一個元素。

pop_front()函式刪除連結串列的第一個元素。

語法:

L5.push_front("new-start");             //在最前端加數值

L5.push_back("end");                    //在末尾加數值

push_front()函式將val連線到連結串列的頭部。

push_back()將val連線到連結串列的最後

語法:

cout << "*L5.rbegin() = " << *L5.rbegin();      //L5.rbgin指向連結串列末尾

L5.rend()                                 //指向L5開頭,起始之前

rbegin()函式返回一個逆向迭代器,指向連結串列的末尾。

語法:

L5.remove("abc");                       //刪除指定數值

remove()函式刪除連結串列中所有值為val的元素。例如

語法:

  void remove_if( UnPred pr );

remove_if()以一元謂詞pr為判斷元素的依據,遍歷整個連結串列。如果pr返回true則刪除該元素。

語法:

L5.resize(10,"q");                                  //給L5重新分配可儲存大小

resize()函式把list的大小改變到num。被加入的多餘的元素都被賦值為val,可以省略val

語法:

L5.reverse();                           //反轉連結串列中元素位置

reverse()函式把list所有元素倒轉。

size

語法:

cout << "L5.size = " << L5.size() << endl; //返回連結串列中元素個數

size()函式返回list中元素的數量。

sort

語法:

L5.sort();                              //連結串列中元素排序

sort()函式為連結串列排序,預設是升序。如果指定compfunction的話,就採用指定函式來判定兩個元素的大小。

語法:

L5.splice(L5.end(),L2);                 //在指定位置連上另外一個連結串列 

void splice( iterator pos, list &lst, iterator del );

splice()函式把lst連線到pos的位置。如果指定其他引數,則插入lst中del所指元素到現連結串列的pos上,或者用start和end指定範圍。

swap

語法:

L2.swap(L5);                            //交換兩個連結串列的數值

swap()函式交換lst和現連結串列中的元素。

語法:

L2.unique();                            //刪除重複元素 

void unique( BinPred pr );

unique()函式刪除連結串列中所有重複的元素。如果指定pr,則使用pr來判定是否刪除。