vector 初始化所有方法



簡介:
vector可用於代替C中的數組,或者MFC中的CArray,從許多說明文檔或者網上評論,一般一致認為應該多用vector,因為它的效率更高,而且具備很好的異常安全性。而且vector是STL推薦使用的默認容器,除非你知道你有特殊需要,使用vector不能滿足你的需求,例如需要容器在head和tail高效的插入和刪除,或者在任何位置高效的刪除和插入操作,那么你可能使用deque或者list更加合適。

vector是連續內存容器,換句話說,標准要求所有標准庫實現的時候,vector中的元素的內存必須是連續的。所以對於插入和刪除的時間復雜度是很高的,因為刪除或者插入的時候,需要元素的移動,即元素復制拷貝。

vector的內部實現一般需要用到placement new ,所以效率很高,因為很多的時候,只要我們是使用得到,就可以省去很多的內存分配開銷。而且vector的使用,元素可以沒有默認的構造函數,但是需要拷貝構造函數的存在,這是使用CArray所無法實現的。

使用原則:

  1. 盡量使用vector代替C風格的數組或者CArray;
  2. 盡量使用算法代替手工寫的循環;
  3. 盡量使用vector本身的函數代替其他泛型算法;

vector的接口很容易看懂和使用,這里以一些例子來說明vector的用法。

1,填充vector

如果我們想用原始數組的內容填充vector,那么於有很多種方式。我們來一次學習vector的幾個方法。

例如我們有數組int  v1[10] = {0,1,0,0,3,0,0,4,4,4};

初始化方式1:

1 vector<int> v2(10); //初始化size為10可以避免數組動態增長的時候不斷的分配內存
2 //v2.reserve(10);//同上,只要使用其中一個就可以了
3 forint i=0; i<10; i++ )
4 {
5 v2.push_back(v1[i]);//增加一個元素
6 }

初始化方式2

1 vector<int> v3(&v1[0],&v1[9]);//原始數組的元素指針可以作為迭代器來使用

初始化方式3

1 vector<int> v4;
2 v4.reserve(10);
3 v4.insert(v4.begin(), &v1[0], &v[9]);

初始化方式4:

1 vector<int> v5(10);
2 copy(v5.begin(), &v1[0], &v1[9]);

原始數組的元素指針可以作為迭代器來使用。

原則:盡量使用reserve來減少不必要的內存分配次數。

原則:盡量使用empty而不是size()==0 來判斷容器是否為空

有可能我們需要在vector中插入相應的元素

1 vector<int>::iterator i = find( v1.begin(), v1.end(), 3);
2 if( i != v1.end() )
3 {
4 v1.insert( i, 6 );
5 }

原創文章,轉載請注明: 轉載自C/C++程序員之家

本文鏈接地址: STL之vector的使用一(初始化vector)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM