1、关联容器和顺序容器
C++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector、list、deque等。关联容器主要有map和set。如下图:
1、vector基本使用
#include <iostream> #include <stdlib.h> #include <string.h> #include <algorithm> #include <vector> using namespace std; //利用模版进行输出 template <typename T> void print(vector<T> a) { //输出方法1 for(auto i:a) { cout<<i<<‘\t‘; } cout<<endl; //输出方法2 typename vector<T>::iterator it;//前面要加typename,要不会出错 for(it=a.begin();it!=a.end();it++) { cout<<*it<<‘\t‘; } cout<<endl; //输出方法3,这里只是想说这样也可以输出 cout<<a[0]<<‘\t‘<<a[1]<<‘\t‘<<a[2]<<‘\t‘<<a[3]<<‘\t‘<<a[4]<<endl; cout<<"********************"<<endl; } int main() { /*vector初始化对象*/ vector<int> v1;//v1是一个空的vector,潜在的元素是int类型,执行时,默认初始化 v1={1,2,3,4,5}; print(v1); vector<int> v2(v1);//相当于vector<int> v2=v1 print(v2); vector<char> v3(5,‘a‘);//v3中含有5个a字符 print(v3); vector<string> v4{"aa","ss","dd","ff","gg"};//v4赋值 print(v4); vector<float> v5(5);//出事化v5,为5个0.0 v5[0]=1.1; // v5[6]=8.8; vector可以利用下标访问,但是不能使用下标添加元素 print(v5); /*-------------------------------------------------------------------------------*/ /*vector操作*/ vector<string> v6; if(v6.empty())//vector是否为空 { cout<<"------"<<"v6 is empty"<<"-------"<<endl; } string s="qwe"; for(int i=0;i<5;i++) { v6.push_back(s);//末尾添加一个元素 } v6.pop_back();//末尾删除一个 v6.push_back("1234"); print(v6); cout<<"------"<<"v6的长度为:"<<v6.size()<<"------"<<endl; v6=v4;//拷贝v4中的元素赋值到v6中 if(v6==v4) { cout<<"------"<<"v6==v4"<<"------"<<endl; } /*-------------------------------------------------------------------------------*/ /*vector常用操作*/ vector<int> array={1,6,2,6,3,6,4,6,5,6}; array.erase(remove(array.begin(),array.end(),6),array.end());//需添加头文件algorithm /*remove函数使用: *remove(始地址,终地址,需要移除的元素),返回是被替换的数第一个数的地址,比如本题vector *原始数组为:[1,6,2,6,3,6,4,6,5,6],使用remove函数后为[1,2,3,4,5,6,4,6,5,6], *返回的地址为位置5上(0开始)的6的地址,如下输出数字5. cout<<*(remove(array.begin(),array.end(),6)-1)<<endl;*/ /*删除6的另一种方法 vector<int>::iterator it1; it1=array.begin(); for(it1=array.begin();it1!=array.end();it1++) { if(6==*it1) { array.erase(it1);//删除掉it1时,it1会指向下一个数,也就是6,然后再自加会指向下一个6,也就是邻接的6是删除不掉的 it1--;//加上这一句就不会出错 } }*/ print(array); vector< vector<int> > intVV;//vector实现二维数组 vector<int> intV; int i,j; for(i=0;i<3;++i){ intV.clear(); for(j=0;j<5;++j) intV.push_back(i*10+j); intVV.push_back(intV); } for(i=0;i<3;++i){ for(j=0;j<5;++j) cout<<intVV[i][j]<<‘\t‘; cout<<endl; } return 0; }
原文:https://www.cnblogs.com/ybf-yyj/p/9287768.html