c++中的vector容器 Posted on 2022-12-07 00:00:00 2022-12-07 00:00:00 by Author 摘要 c++ 学习笔记,vector容器的学习笔记 #### vector容器 功能:单端数组 - 不同之于在于数组是静态空间,而vector可以动态扩展 - 默认构造右4种 - ```c++ #include<iostream> using namespace std; #include<vector> void printVector(vector<int> &v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout<<*it<<endl; } } void test01(){ vector<int> v; for(int i=1;i<5;i++){ v.push_back(i); } printVector(v); vector<int> v2(v.begin(),v.end()); printVector(v2); vector<int>v3(10,100);//10个100 printVector(v3); vector<int> v4(v3); printVector(v4); } int main(){ test01(); system("pause"); return 0; } ``` #### vector赋值操作 - 函数原型三种: - vector& operator=(const vector&vec);//重载等号赋值 - assign(begin,end);将区间中的数据拷贝赋值 - assign(n,elem);//将n个elem拷贝赋值给本身 - ```c++ #include<iostream> using namespace std; #include<vector> void printVector(vector<int>&v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout<<(*it)<<endl; } } void test01(){ vector<int> v1; for(int i=0;i<=9;i++){ v1.push_back(i); } printVector(v1); vector<int> v2; //operator= v2=v1; printVector(v2); vector<int> v3; // assign v3.assign(v1.begin(),v1.end()); printVector(v3); // n个elem v3.assign(10,100); printVector(v3); } int main(){ test01(); system("pause"); return 0; } ``` #### vector 容量和大小 - 函数原型 - empty();//判断容器是否为空 - capacity(); // 容器的容量 - size();容器元素的个数 - resize(int num);//重新指定容器长度为num; - resize(int num,elem);//长度为num,以elem填充 - ```c++ #include<iostream> using namespace std; #include<vector> void printVector(vector<int>&v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout<<(*it)<<endl; } } void test01(){ vector<int> v1; for(int i=0;i<=9;i++){ v1.push_back(i); } printVector(v1); if(!v1.empty()){ cout<<"v2不为空"<<endl; } cout<<v1.capacity()<<endl; cout<<v1.size()<<endl; //重新指定resize v1.resize(15); cout<<v1.capacity()<<endl; cout<<v1.size()<<endl; v1.resize(5); cout<<v1.capacity()<<endl; cout<<v1.size()<<endl; printVector(v1); } int main(){ test01(); system("pause"); return 0; } ``` ##### vector插入和删除 函数原型: - push_back(ele);//尾部插入元素 - pop_back();//删除最后一个元素 - insert(const_iterator pos,ele);//迭代器指向位置pos插入ele - insert(const_iterator pos,int count,ele);//插入count个ele - erase(const_iterator pos);//删除迭代器指向的元素 - erase(const_iterator start,const _iterator end);//删除迭代器start到end之间的元素 - clear();//删除容器中所有元素 - ```c++ #include<iostream> using namespace std; #include<vector> void printVector(vector<int>&v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout<<(*it)<<endl; } } void test01(){ vector<int> v1; for(int i=0;i<=3;i++){ v1.push_back(i+10); } printVector(v1); v1.pop_back(); printVector(v1); //第一个参数是迭代器 v1.insert(v1.begin(),100); printVector(v1); v1.insert(v1.begin(),2,1000); printVector(v1); //删除参数也是迭代器 v1.erase(v1.begin()); printVector(v1); v1.erase(v1.begin(),v1.end()); printVector(v1); //清空操作 v1.clear(); } int main(){ test01(); system("pause"); return 0; } ``` #### vector数据存取操作 函数原型: - at(int index);//返回索引idx所指的数据 - operator[];//返回idx所指的数据 - front();//返回容器中第一个数据元素 - back();//返回容器中最后一个数据元素 - ```c++ #include<iostream> using namespace std; #include<vector> void printVector(vector<int>&v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout<<(*it)<<endl; } } void test01(){ vector<int> v1; for(int i=0;i<=3;i++){ v1.push_back(i+10); } printVector(v1); cout<<v1.at(0)<<endl;//10 cout<<v1[2]<<endl;// 12 cout<<v1.front()<<endl; cout<<v1.back()<<endl; } int main(){ test01(); system("pause"); return 0; } ``` #### vector互换容器 函数原型: - swap(vec);//将vec与本身元素互换 - ```c++ #include<iostream> using namespace std; #include<vector> void printVector(vector<int>&v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout<<(*it)<<" "; } cout<<endl; } void test01(){ vector<int> v1; for(int i=0;i<10;i++){ v1.push_back(i); } printVector(v1); vector<int> v2; for(int i=9;i>=0;i--){ v2.push_back(i); } printVector(v2); cout<<"交换后:"<<endl; v1.swap(v2); printVector(v1);//9-0 printVector(v2);//0-9 } void test02(){ vector<int>v; for(int i=0;i<100000;i++){ v.push_back(i); } cout<<"v的容量:"<<v.capacity()<<endl; cout<<"v的大小:"<<v.size()<<endl; v.resize(3); cout<<"v的容量:"<<v.capacity()<<endl; cout<<"v的大小:"<<v.size()<<endl; //巧用swap收缩内存 vector<int>(v).swap(v); cout<<"v的容量:"<<v.capacity()<<endl; cout<<"v的大小:"<<v.size()<<endl; } int main(){ test02(); system("pause"); return 0; } ``` #### vector预留空间 ```c++ #include<iostream> using namespace std; #include<vector> void printVector(vector<int>&v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout<<(*it)<<" "; } cout<<endl; } void test02(){ vector<int>v; int num = 0; int *p=NULL; for(int i=0;i<100000;i++){ v.push_back(i); if(p!=&v[0]){ p=&v[0]; num++; } } cout<<"num="<<num<<endl;//18 } int main(){ test02(); system("pause"); return 0; } //加上v.reverse(); 就等于1; ```
{{ item.content }}
{{ child.content }}