c++打卡第三十六天
一、STL中的vector容器
vector开辟的动态数组区间为[begin,end),示意图如下。
1、容器放内置数据类型
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; //一、vector容器存放内置数据类型 //容器 :vector //算法 :for_each //迭代器 :vector<int>::iterator void print(int val) { cout<<val<<endl; } void test01() { vector<int>v; v.push_back(32); v.push_back(132); v.push_back(232); v.push_back(332); v.push_back(432); // 第一种遍历方式 vector<int>::iterator begin=v.begin();//指向数组的第一个元素的位置 vector<int>::iterator end=v.end();//end所指为数组最后一位的位置的下一位 while(begin!=end) { cout<<*begin<<endl; begin++; } // 第二种遍历方式 for(vector<int>::iterator begin=v.begin();begin!=v.end();begin++) { cout<<*begin<<endl; } // 第三种遍历方式 for_each(v.begin(),v.end(),print);//需要调用库函数algorithm } int main() { test01(); test02(); test03(); return 0; }
2、容器嵌套
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; void test01() { vector<vector<int> >v; vector<int>v1; vector<int>v2; vector<int>v3; vector<int>v4; for(int i=1;i<6;i++) { v1.push_back(i+6); v2.push_back(i+7); v3.push_back(i+8); v4.push_back(i+9); } v.push_back(v1); v.push_back(v2); v.push_back(v3); v.push_back(v4); for(vector<vector<int> >::iterator it=v.begin();it!=v.end();it++) { for(vector<int>::iterator vit=(*it).begin();vit!=(*it).end();vit++) { cout<<*vit<<" "; } cout<<endl; } } int main() { test01(); return 0; }
3、容器构造
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; void prinnt(vector<int>&v1) { for(vector<int>::iterator it=v1.begin();it!=v1.end();it++) { cout<<*it<< " "; } cout<<endl; } void test01() { vector<int>v1; //默认构造 无参构造 for(int i;i<10;i++) { v1.push_back(i+1); } prinnt(v1); //通过区间构造 vector<int>v2(v1.begin(),v1.end()-1); prinnt(v2); //n个元素构造 vector<int>v3(19,45);//19个45 prinnt(v3); //拷贝构造 vector<int>v4(v3); prinnt(v4); } int main() { test01(); return 0; }
4、赋值操作
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; void prinnt(vector<int>&v1) { for(vector<int>::iterator it=v1.begin();it!=v1.end();it++) { cout<<*it<< " "; } cout<<endl; } void test01() { vector<int>v1; //默认构造 无参构造 for(int i;i<10;i++) { v1.push_back(i+1); } prinnt(v1); //赋值 vector<int>v2; v2=v1; prinnt(v2); //assign vector<int>v3; v3.assign(v1.begin(),v1.end()); prinnt(v3); //n个m vector<int>v4; v4.assign(14,88); prinnt(v4); } int main() { test01(); return 0; }
5、容器容量的大小
#include<iostream> #include<vector> using namespace std; //vector容器容量的 大小 void prinnt(vector<int>&v1) { for(vector<int>::iterator it=v1.begin(); it!=v1.end(); it++) { cout<<*it<< " "; } cout<<endl; } void test01() { vector<int>v1; //默认构造 无参构造 for(int i; i<10; i++) { v1.push_back(i+2); } prinnt(v1); if(v1.empty()) { cout<<"v1为空"<<endl; } else { cout<<"v1不为空"<<endl; cout<<"v1的容量为"<<v1.capacity() <<endl; cout<<"v1的大小为"<<v1.size() <<endl; } v1.resize(7,100);//重新指定大小 ,若比原来长,用0填充v1.resize(15,100)可以填充100 prinnt(v1); cout<<"v1的大小为"<<v1.size() <<endl; } int main() { test01(); return 0; }
6、容器的插入和删除
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; void prinnt(vector<int>&v1) { for(vector<int>::iterator it=v1.begin(); it!=v1.end(); it++) { cout<<*it<< " "; } cout<<endl; } void test01() { vector<int>v1; //尾插法 v1.push_back(10); v1.push_back(30); v1.push_back(50); v1.push_back(70); prinnt(v1); //尾删 v1.pop_back(); prinnt(v1); //插入 v1.insert(v1.begin(),14); prinnt(v1); //插入n个数 v1.insert(v1.begin(),3,17); prinnt(v1); //删除 v1.erase(v1.begin()); prinnt(v1); //区间删除 v1.erase(v1.begin(),v1.begin()+2); prinnt(v1); //清空 v1.clear(); prinnt(v1); } int main() { test01(); return 0; }
7、容器的互换
#include<iostream> #include<vector> using namespace std; //vector容器的互换 void prinnt(vector<int>&v1) { for(vector<int>::iterator it=v1.begin(); it!=v1.end(); it++) { cout<<*it<< " "; } cout<<endl; } void test01() { vector<int>v1; //默认构造 无参构造 for(int i; i<10; i++) { v1.push_back(i+2); } prinnt(v1); } int main() { test01(); return 0; }
8、容器数据的存取
#include<iostream> #include<vector> using namespace std; //vector容器数据的存取 //void prinnt(vector<int>&v1) { // for(vector<int>::iterator it=v1.begin(); it!=v1.end(); it++) { // cout<<*it<< " "; // } // cout<<endl; //} void test01() { vector<int>v1; //默认构造 无参构造 for(int i; i<10; i++) { v1.push_back(i+2); } //利用[]访问数组元素 for(int i=0; i<v1.size(); i++) { cout<<v1[i]<<" "; } cout<<endl; //利用at访问 for(int i=0; i<v1.size(); i++) { cout<<v1.at(i)<<" "; } cout<<endl; //获取第一个元素 cout<<"获取第一个元素"<<v1.front()<<endl; //获取倒数第一个元素 cout<<"获取倒数第一个元素"<<v1.back()<<endl; } int main() { test01(); return 0; }
9、容器的预存空间
#include<iostream> #include<vector> using namespace std; //容器预留空间 reserve(int len); void test01() { vector<int>v1; //默认构造 无参构造 int num=0; int *p=NULL; //利用reserve预存空间 v1.reserve(1000000);//经此之后开辟次数为1 for(int i; i<1000000; i++) { v1.push_back(i); if(p!=&v1[0])//当指针不指向首位时,将指针指向首位,当内存不够用再次开辟时,此时指针失效,我们再将其指向首地址。 { p=&v1[0]; num++; } } cout<<"开辟内存总次数为为:"<<num<<endl;// } int main() { test01(); return 0; }
10、与其他的不同