STL 順序容器注意事項

來源:互聯網
上載者:User

順序容器就是指vector, list, deque.

1.建構函式

設C為上面三種容器中的一種,則建構函式有如下5種

1.C<T> c; //T是元素類型,容器初始化為空白,例如vector<int> vec;

2.C<T> cc(c); //建立容器cc,複製c的值到cc.兩者必須具有相同的容器類型.例如vector<int> vec; vector<double> vt(vec);會出錯

3.C<T> c(start, end); //建立一個容器,然後從另外哪個容器的兩個迭代器區間拷貝元素.兩種容器可以不一樣.但是元素類型要匹配

                      //例如vector<int> vec;  list<int> lt( vec.begin() , vec.end() );

4.C<T> c(n,val);  //建立容器,有n個值,每個值都為val,val的類型不一定要和T一樣,但要可轉換.例如vector<int> vec(3, 1.0);

5.C<T> c(n);      //建立容器,有n個值,全部預設為0值.

補充: 實際上前三種建構函式,關聯視窗也可以用.但4,5種建構函式只有順序容器才可以用.

另外容器適配器的建構函式只有兩種.

queue<int> qu; //方法1

queue<int> que( qu._Get_container); //把qu複製過來.因為queue實際上是用deque實現的.所以這個建構函式等同於.deque<int> que(qu);

 

2.容器元素類型約束

所有內建的的類型都可以做為容器元素,但是唯一例外的是引用(它不支援一般意義上的賦值),指標也可以做為容器元素.如果自訂的類型,必須符合下面兩個條件

支援賦值運算

類型對象必須可複製

 

 

3.vector, deque迭代器的特殊用法

容器適配器(stack, queue,priority_queue)是沒有迭代器的.而順序容器與關聯容器都有迭代器,一般的迭代器只支援如下一些簡單操作:

*iterator , iterator->item,

iterator++ , iterator--, ++iterator, --iterator , 

iterator1 != iterator2 , iterator1 == iterator2

 

但vector , deque這兩容器的迭代器還有些特殊用法,原因嘛是因為這兩者都是用動態數組實現的,所以它們的迭代器會有和數組下標類似的操作.

有如下特殊用法:(概括起來就兩大類:算術運算和大小比較)

iterator + n 或者iterator - n //迭代器後面n位或前面n位的元素位置

iter1 += iter2

iter1 - iter2;

> , >= , < , <= //數組下標在後面比前面的下標大嘛.

 

反正想下數組下標就是些從小排列到大的數字,而vector和deque的迭代器和數組下標類似,這樣一想很容易理解上面的特殊用法了.

 

迭代器失效

迭代器就類似於一個指標,我們知道當指標指向的記憶體地區如果被釋放了,則指標變成野指標了.同樣如果迭代器指向的的元素的變更了(被刪除了,或者移動了),也就是比如執行了pop_back() , erase之類的操作.而使用迭代器的時候沒辦法去判斷它是否失效.所以使用的時候得自己小心了啊.

 

 

容器的選擇

一般沒啥特殊需求的話用vector就行了.

需要經常插入刪除的就用list,即需要隨機訪問,又需要在首尾兩端插入刪除就用deque.

如果只就是在剛開始初始化容器時需要作些插入操作,後續的操作則都是訪問元素.則可以先用list完成初始化,然後將list中的元素拷貝到vector中

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.