關於C++的vector用法的總結
阿新 • • 發佈:2019-01-04
標準庫型別的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()