4.vector 的插入删除
.push_back()
.pop_back()
.insert(const_iterator pos,elem); //对应位置插入elem
.insert(const _iterator pos,int count,int elem) //对应位置插入count个elem
.erase(const_iterator pos); //删除对应位置
.erase(const _iterator begin(),const _iterator.end()) //删除[begin,end)的数
.clear() //删除全部数
插入与删除里面都是用迭代器
#include <iostream> using namespace std; #include <string> #include <vector> void PrintVector(vector<int>&v) //打印vector中的数据 { for(vector<int>::iterator it = v.begin();it!= v.end();it++) { cout<<(*it)<<" "; } cout<<endl; } void test01() { vector<int> v; //尾插 v.push_back(10); v.push_back(20); v.push_back(30); PrintVector(v); //尾删 v.pop_back(); PrintVector(v); //插入 v.insert(v.begin(),0); PrintVector(v); //插入多个 v.insert(v.begin(),2,10); PrintVector(v); //删除 v.erase(v.begin()); PrintVector(v); //v.erase(v.begin(),v.end()); //相当于清除 v.clear(); PrintVector(v); } int main() { test01(); system("pause"); return 0; }
运行结果:
———————————————————————————————————
5.vector 的数据存取
.at(int idx);
.operator[]
.front()
.back()
#include <iostream> using namespace std; #include <string> #include <vector> void PrintVector(vector<int>&v) //打印vector中的数据 { for(vector<int>::iterator it = v.begin();it!= v.end();it++) { cout<<(*it)<<" "; } cout<<endl; } void test01() { vector<int> v; for(int i=0;i<10;i++) { v.push_back(i); } //利用[]访问 for(unsigned int i=0;i<v.size();i++) { cout<<v[i]<<" "; } cout<<endl; //利用.at()访问 for(unsigned int i=0;i<v.size();i++) { cout<<v.at(i)<<" "; } cout<<endl; //输出第一个 cout<<v.front()<<endl; //输出最后一个位置上的 cout<<v.back()<<endl; } int main() { test01(); system("pause"); return 0; }
结果:
———————————————————————————————————
6.vector的容器互换
1.两个容器中的数据交换
2.实际用途,巧用swap收缩
例1:普通两个容器数据交换
#include <iostream> using namespace std; #include <string> #include <vector> void PrintVector(vector<int>&v) //打印vector中的数据 { for(vector<int>::iterator it = v.begin();it!= v.end();it++) { cout<<(*it)<<" "; } cout<<endl; } void test01() { vector<int> v; for(int i=0;i<10;i++) { v.push_back(i); } vector<int> v1; for(int i=9;i>=0;i--) { v1.push_back(i); } cout<<"交换前:"<<endl; PrintVector(v); PrintVector(v1); v.swap(v1); cout<<"交换后:"<<endl; PrintVector(v); PrintVector(v1); } int main() { test01(); system("pause"); return 0; }
运行结果:
例子2:巧用swap()
#include <iostream> using namespace std; #include <string> #include <vector> void PrintVector(vector<int>&v) //打印vector中的数据 { for(vector<int>::iterator it = v.begin();it!= v.end();it++) { cout<<(*it)<<" "; } cout<<endl; } void test01() { vector<int> v; //存放十万个数据进容器 for(int i=0;i<100000;i++) { v.push_back(i); } //看一下容器的容量 cout<<v.capacity()<<endl; //容器的大小 cout<<v.size()<<endl; //重新分配空间 v.resize(5); cout<<endl<<"重新分配空间后:"<<endl; cout<<v.capacity()<<endl; //此时发现容量还是有那么多,这样的话就会浪费掉 cout<<v.size()<<endl; vector<int>(v).swap(v); //vector<int>(v) 是一个匿名函数,互相交换过后,会自动释放 cout<<endl<<"收缩后的容器:"<<endl; //看一下容器的容量 cout<<v.capacity()<<endl; //容器的大小 cout<<v.size()<<endl; } int main() { test01(); system("pause"); return 0; }
运行结果:
———————————————————————————————————
7.vector 预留空间
.reserve(int len); //容器预留len个元素,预留位置不初始化,元素不可访问
减少vector在动态分配容量时的扩展次数
例:
#include <iostream> using namespace std; #include <vector> void test01() { vector<int> v; int *p = NULL; int num =0; for(int i=0;i<100000;i++) { v.push_back(i); if(p != &v[0]) //这段代码是计算容器开辟新空间的次数 { p = &v[0]; num++; } } cout<<"动态扩展的次数:"<<num<<endl; } int main() { test01(); system("pause"); return 0; }
运算结果:动态扩展次数为30
此时我们加一段代码:v.reserve(100000);
#include <iostream> using namespace std; #include <vector> void test01() { vector<int> v; int *p = NULL; int num =0; v.reserve(100000); //让容器先预留100000个空间 for(int i=0;i<100000;i++) { v.push_back(i); if(p != &v[0]) //这段代码是计算容器开辟新空间的次数 { p = &v[0]; num++; } } cout<<"动态扩展的次数:"<<num<<endl; } int main() { test01(); system("pause"); return 0; }
此时运算结果为:动态扩展次数:1