使用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;
}