1. 程式人生 > >關於C++的vector用法的總結

關於C++的vector用法的總結

標準庫型別的vector表示物件的集合,其中所有的物件都有相同的型別;集合中每一個物件都有一個與其對應的索引,索引用於訪問物件。使用時必須包含:

#include<vector>
using std::vector;

1、定義和初始化vector物件

vector<string> svec;//預設初始化,svec不包含任何元素
//事實上,最常見的方式是先定義一個空的vector,
//然後當執行時獲取到元素值就新增進去;

vector<int> ivec;
//往ivec中新增一些值
vector<int> ivec1(ivec);
vector<int> ivec2=ivec;

列表初始化

vector<string> svec={"the","Three","Kingdoms"};//使用'='進行列表初始化
//也可以將初始值都放在花括號裡進行列表初始化
vector<string> v{"Be","a","Better","Fighter"};

創建制定數量的元素

vector<int> ivec(10,-1);//10和int元素,每個都初始化為-1
vector<int> ivec1(10);//10個int元素,每個初始化為0
vector<string> svec(10,"hello");//10個string元素,每個都初始化為"hello"
vector<string> svec1(10);//10個string元素,每個都為空string物件

建立二維陣列

vector<vector<int>> arr(2,vector<int>(5));//建立2行5列的二維陣列,初值值為0

2、向vector中新增元素
push_back負責把一個值當成vector物件的尾元素“push”到vector物件的"尾端back"

vector<double> dvec;
double temp;
for(int i=0;i<100;i++)
{
   temp=i*i;
   dvec.push_back(temp);
}

從標準輸入中讀取單詞,存入vector中

string word;
vector<string> text;
while(cin>>word)
{
   text,push_back(word);
}

3、vector的其他操作

  • v.empty();//檢查是否為空
  • v.capacity();//返回當前vector中最大可以儲存資料的容量
  • v.size();//返回v中元素的個數
  • v[n];//獲取v中第n個元素

使用引用改變vector中的元素

vector<int> v{1,2,3,4,5,6,7,8,9};
for(auto &i:v)
{
   i*=100;
   cout<<i<<endl;
}

例子:以10分為一個分數段統計成績的數量:09,1019,20~29,…

vector<int> scores(11,0);//11個分數段,全都初始化為0
unsigned int grade;
while(cin>>grade)//讀取成績
{
   if(grade<=100)//只處理有效的成績
       ++scores[grade/10];//將對應分數段的計數值加1
}

特別注意:對於一個空的vector,不能使用下標向其中新增元素。只能使用push_back. 只能對確知已存在的元素執行下標操作。

4、使用迭代器
begin成員負責返回指向第一個元素(或第一個字元)的迭代器;end成員負責返回指向容器(或string物件)的尾元素的下一個位置的迭代器。
begin和end返回的具體型別由物件是否是常量決定,如果物件是常量,begin和end返回const_iterator;如果物件不是常量,返回iterator;

vector<int>::iterator it;//it是能讀寫的vector<int>的元素
string::iterator it1;//it1是能讀寫的string物件中的字元
vector<int>::const_iterator it2;//it2只能讀元素,不能寫元素
string::const_iterator it3;//it3只能讀字元,不能寫字元

例子,使用迭代器依次輸出text的每一行知道遇到第一個空白行為止:

for(auto it=text.cbegin();it!=text.cend()&&!it->empty();++it)
{
   cout<<*it<<endl;
}

cbegin()等價於const_begin();cend()等價於const_end()