使用vector索引:
(1)什么是vector:向量(vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其他类型容器各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 (2)头文件:#include <vector> (3)vector的基本用法 #include <vector> vector <int> a,b; 1.添加元素 a.assign(b.begin(),b.begin()+3) //将b的第0到2个元素添加到a a.assign(4,2) //a含有4个值为2的元素(不管原来的元素了,直接删掉就好了) 2.插入元素 a.push_back(5) //在a的最后插入5 a.insert(a.begin()+1,5) //在a的第一个元素位置插入5(从第0个算起) a.insert(a.begin()+1,3,5) //在a的第一个元素位置插入3个5 a.insert(a.begin()+1,b+3,b+6) //b为数组,在a的第一个元素位置插入b[3]到b[5](不包括b[6]) 3.返回元素 a.back() //返回a的最后一个元素 a.front() //返回a的第一个元素 a[i] //返回a的第i个元素 4.清空或判断是否为空 a.clear() //清空a中的元素 a.empty() //判断a是否为空,如果是空则为true,否则为false 5.删除元素 a.pop_back() //删除a的最后一个元素 a.erase(a.begin()) //删除a的第一个元素 a.erase(a.begin(),a.begin()+3) //删除a的第0到2个元素 a.erase(*find(.begin(),a.end(),5)) //具体删掉a中的5这个元素 6.返回大小或内存 a.size() //返回a所容纳的元素个数 a.capacity() //返回a在内存中总共可以容纳的元素个数 7.调整内存 size:当前使用数据的大小 resize:改变当前vector分配的大小,如果它比当前使用的大,则填充默认值 (扩充且填值) reserve:改变当前vector所分配空间的大小 (仅仅扩充不填值) a.resize(10) //将a现有的元素个数调至10个,多则删,少则补,补的值是0 a.resive(10,2) //将a现有的元素个数调至10个,多则删,少则补,补的值为2 a.reserve(100) //将a的容量扩充至100 8.交换 a.swap(b) //b和a是一样的vector向量,将a中的元素和b中的元素整体交换 9.a.size 和 a.capacity 的具体区别 a.push_back(1); cout << a.size() << endl; // 1 cout << a.capacity() << endl; // 1 a.resize(10); cout << a.size() << endl; // 10 cout << a.capacity() << endl; // 10 a.reserve(100); cout << a.size() << endl; // 10 cout << a.capacity() << endl; // 100
vector的具体用法:
1.vector的初始化 (1)vector<int>a(10); //定义a[0]到a[9]的值均为0; (2)vector<int>a(10,1); //定义a[0]到a[9]的值为1; (3)vector<int>a(b). //b同a也是定义的vector,将b中的元素赋给a,即a等价于b (4)vector<int>a(b.begin(),b.begin()+10) //将b的第0到9个元素 (5)int b[10]={0,1,2,3,4,5,6,7,8,9}; vector<int>a(b,b+10); //将b[0]到b[9]赋给a 2.添加元素( push_back() ) (1)简单添加 vector<int>a; for (int i=1;i<10;i++) { a.push_back(i); } (2)从已有的vector中获得值 //将a中的值赋给c int b[10]={0,1,2,3,4,5,6,7,8,9}; vector<int>a(b,b+10); vector<int>c; for (vector<int>::iterator it = a.begin();it!=a.end();it++) { c.push_back(*it); } (3)错误的赋值方法 vector<int>a; for (int i=1;i<=10;i++) a[i]=i; //下标只能用来获取已经存在的元素(请看vector基本用法3.返回元素) 3.vector的算法 #include<algorithm> sort(a.begin(),a.end());//对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列 如果想要从大到小排序,可以先sort从小到大排好序,然后用reverse倒置,就可以从大到小排序了 reverse(a.begin(),a.end());//对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1 copy(a.begin(),a.end(),b.begin()+1);//把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素 find(a.begin(),a.end(),10);//在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置 实例: vector<int>v; for (int i=1;i<=10;i+=2) v.push_back(i); vector<int>::iterator it=find(v.begin(), v.end(), 7); if(it!=v.end()) cout << *it << endl; else cout << "找不到" << endl; cout << *find(v.begin(), v.end(), 9); (4)关于vector结构体的用法 简单代码: struct sss { int x,y,z; }; vector<sss>v; for (int i=1;i<=10;i++) { v.push_back(sss{i,i,i}); } for (vector<sss>::iterator it=v.begin();it!=v.end();it++) { cout << it->x << " " << it->y << " " << it->z << endl; }