#漫漫長(zhǎng)路C++(一):C++中的vector容器
包含頭文件
vector是一個(gè)類(lèi)模板,不是類(lèi)或者函數(shù)脊另。
#include<vector>
using std::vector;
定義與初始化
vector<int> int1;
vector<int> int2(int1);
vector<int> int2 = int1;
vector<int> int3( 10 , 1 );//十個(gè)一
vector<int> int4(5);//五個(gè)值初始化的對(duì)象
vector<int> int4{1,2,3,4,5,6};//int4={1,2,3,4,5,6}
vector的常用函數(shù)
vector不能用下表來(lái)進(jìn)行元素的添加鉴逞,常見(jiàn)的操作元素的函數(shù)有:
#include <algorithm>
using namespace std;
ostream &operator<< (ostream &os, vector<int> &a)//重載輸出操作符<<
{
for(auto i : a)
os<<i<<'\t';
// cout<<endl;
return os;
}
int main()
{
vector<int> int1(10,5);
int1.empty();//是否為空
int1.size();//長(zhǎng)度
int1.push_back(6);//末尾插入6
int1.pop_back();//刪除末尾數(shù)據(jù)
int1.at(2);//int1[2]
int1.end();//末尾+1指針
int1.begin();//首元素指針
int1.front();//首元素值
int1.back();//末元素值
int1.erase(int1.begin()+3);//刪除第四個(gè)元素,其余元素前移
int1.clear();//清空
int1.reserve(20);
cout<<int1.capacity()<<'\t'<<int1.size()<<'\t'<< sizeof(int1);
reverse(int1.begin(),int1.end());//顛倒順序
for(auto &i : int1)
i*=i;
// cout<<i;}
cout<< int1;
// int a[11]= {0,1,2,3,4,8,9,3,5,9,6};
// vector<int> vec(a,a+9);//使用數(shù)組的地址作為迭代器
// sort(vec.begin(), vec.end()); //一定要排序K狙怠9辜瘛!?遣隆0认病!
// vector<int>::iterator iter = unique(vec.begin(),vec.end());//創(chuàng)建迭代器,unique函數(shù)實(shí)現(xiàn)去除相鄰元素蓖谢,返回
// vec.erase(iter,vec.end());//刪除去重置于末尾的重復(fù)元素
// for( iter = vec.begin() ; iter != vec.end() ; iter ++ )//生成迭代器
// cout<<*iter<<" ";//使用迭代器所指元素引用
return 0;
}
vector的內(nèi)存管理
vector的size和capibility
http://blog.csdn.net/vampirem_chosen_one/article/details/50519870
原來(lái)在使用push_back向vect中插入元素時(shí)捂蕴,如果當(dāng)前元素?cái)?shù)量大于vector的capacity時(shí),會(huì)重新為vector分配存儲(chǔ)空間闪幽,而分配的原則就是:
原capacity + 原capacity / 2
int1.clear();//只刪除元素啥辨,不釋放內(nèi)存。
vector的使用技巧
盡量使用reserve來(lái)減少不必要的內(nèi)存分配次數(shù)盯腌。
盡量使用empty而不是size()==0 來(lái)判斷容器是否為空