vector详解

简述: 

  头文件—vector,vector是STL里的容器之一,与数组一样,内存空间连续,起始地址不变,能在O(1)做到随机存取。但添加和删除元素需要拷贝则时间为O(n),数组的大小为定义时分配,但vector可以实现动态增长,程序员可以不用考虑容量问题。size返回已用容量大小,capacity返回总空间大小,若capacity与size相等,vector则会分配新内存,拷贝原空间,释放原空间,新分配内存为原内存的两倍,但程序效率不高,我们可以用reserve(n)预先分配一定大小的空间。

定义:

vector<int> ve;
vector<int>::iterator it;//迭代器 
vector<int>::reverse_iterator rit;//逆向迭代器 

vector基本操作: /*x为元素,pos,sta,end为迭代器*/

(1)容量:

•向量大小:ve.size();

•向量判空:ve.empty();

• 向量清空:ve.claer();

(2)修改:

•ve.push_back(x);   末尾添加

•ve.pop_back(x);     末尾删除

•ve.insert(pos,x);     在pos位置插入x

•ve.erase(pos);        删除pos位置的元素

•ve.erase(sta,end);       删除[sta,end]之间的元素

•ve.assign(n,x);            将ve变成n个x

•ve.assign(sta,end);     将ve2的[sta,end)拷贝到ve

•reverse(sta,end);   将[sta,end)的元素翻转 

(3)查询:

ve.begin();             首迭代器

ve.end();     末迭代器

•ve.rbegin();      末位元素的迭代器

•ve.rend();    首位元素往前一个的迭代器

•ve.front();    首元素

•ve.at(index);          index下标的元素

•find(sta,end,x);   在[sta,end)中查找x,找到返回迭代器位置,找不到返回end()

 

(4)遍历:

//通过迭代器:
for(it=ve.begin();it!=ve.end();it++){
    cout<<*it<<" ";
}
//通过下标 
for(int i=0;i<ve.size();i++){
    cout<<ve[i]<<" ";
}
//通过迭代器,这样连it也不用声明了 
for(auto it=ve.begin(); it!=ve.end(); it++) {
    cout<<*it<<" ";
}
// 通过auto 
for(auto it:ve) {
    cout<<it<<" ";
}
//it为元素的拷贝,若要修改原元素则要使用&it 元素则要使用&it

 去重:

sort(ve.begin(),ve.end());
ve.erase(unique(ve.begin(),ve.end()), ve.end());
//unique()函数将重复的元素放到vector的尾部 然后返回指向第一个重复元素的迭代器 再用erase函数擦除从这个元素到最后元素的所有的元素

  

原文地址:https://www.cnblogs.com/qq2210446939/p/12459997.html