天天看點

c++中vector用法總結介紹基本操作

介紹

  1. vector(向量)是大小可變的序列容器
  2. 和數組相似,順序存儲,可使用下标通路(随機通路),但不同的是,vector大小可以動态改變,且是自動變化(容器自己處理的)
  3. vector非常有效地通路其元素(就像數組一樣)并且相對有效地從其末尾添加或删除元素,例如cout<<iv[i];這是可以的。對于在末尾以外的位置插入或删除元素的操作,它們的性能比其他位置差。
  4. 雖然通路像數組一樣,可以根據下标随機通路,但是它的插入不能根據下标像數組一樣插入,例如cin>>iv[i];這是錯誤的

基本操作

詳見官方http://www.cplusplus.com/reference/vector/vector/
  1. 必須引用的包
    #include <vector>
               
  2. 聲明
    vector<int> iv;//也可選擇存double型等,不一定是int型
               
  3. 末尾添加元素
    iv.push_back(x);
               
  4. 末尾删除元素
    iv.pop_back();
               
  5. 任意位置插入
    iv.insert (iv.begin()+i,2,100);//第一個表示在第i+1個位置前面插入;第二個表示插入兩個同樣的數值;第三個表示插入數值為100
    iv.insert (iv.begin(),100);//第一個表示在第一個位置處插入;第二個表示插入一個數值100
               
  6. 任意位置删除
    iv.erase (iv.begin()+i);//删除第i+1個元素
    iv.erase (iv.begin(),iv.begin()+3);//删除第一個到第三個元素(總共三個)
               
  7. 使用下标通路
    cout<<iv[0]<<endl;//下标從0開始
               
  8. 開始指針,末尾指針
    iv.begin();//指向第一個元素的位置(即下标0的位置)
    iv.end();//指向最後一個元素的下一個位置
               
  9. 疊代器通路
    vector<int>::iterator it;
    for(it=iv.begin();it!=iv.end();it++)
        cout<<*it<<endl;
     //或者
    for (int i = 0; i < iv.size(); i++) {
        cout << iv[i] << endl;
    }
     
               
  10. 向量大小 iv.size();
  11. 向量清除 iv.clear();
  12. 向量判空 iv.empty();
  13. 通路第一個元素 iv.front();
  14. 通路第二個元素 iv.back();
  15. 元素翻轉
```
#include <algorithm>//元素翻轉必須引用
reverse(iv.begin(), iv.end());
```
           
  1. 元素排序
```
#include <algorithm>//元素排序必須引用
sort(iv.begin(), iv.end());//預設是從小到大排序
```

```
//此處是從大到小排序
#include <algorithm>//元素排序必須引用
bool cmp(const int a,const int b)
{
    return a > b;
}
sort(iv.begin(),iv.end(),cmp);
```
           
  1. 調整容器大小 iv.resize(10)
resize會改變容器的容量和目前元素個數,并配置設定了記憶體,容器大小變成了10,不會改變之前容器裡面已有的元素,後面會自動添加元素,預設值為0

換句人話:
	vector< int > iv;
    for ( int i=0; i<3;++i)
    {
       vecInt.push_back(i);
    }
    現在是裡面有3個元素
    iv.resize(10);
    iv裡面就有10個元素了,前三個是之前添加的0 1 2,後面7個是預設值0
    此時如果執行iv.push_back(5);
    然後周遊發現,列印出來的值是0 1 2 +7個0,沒有5

這個真的卡了半天
如果後面想resize(10),然後往裡面正常放資料
    vector<int> vIniMatches;
    vIniMatches.resize(iniMatchedNum);
    int num;       
    for(vector<int>::iterator i=vIniMatches.begin(), iEnd=vIniMatches.end(); i!=iEnd; i++){
        // 此處有操作 num不斷變化的
         *i=num;
    }

           

繼續閱讀