1.向量vector简介

向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。
    
在使用它时, 需要包含头文件 vector, #include<vector>    

vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外, vector 也提供了许多的方法来对自身进行操作。

使用原则:

尽量使用vector代替C风格的数组或者CArray;
尽量使用算法代替手工写的循环;
尽量使用vector本身的函数代替其他泛型算法;

2.一维向量的声明及初始化

vector<int> a;                       //声明一个int型向量a
vector<int> a(10);                   //声明一个初始大小为10的向量
vector<int> a(10, 1);      //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a);                    //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3);//将a向量中从第0个到第2个(共3个)作为向量b的初始值

还可以直接使用数组来初始化向量:

int n[] = {1, 2, 3, 4, 5};
vector<int> a(n, n+5);       //将数组n的前5个元素作为向量a的初值
vector<int> a(&n[1], &n[4]); //将n[1] - n[4]范围内的元素作为向量a的初值

3.元素的输入及访问

元素的输入和访问可以像操作普通的数组那样, 用cin>>进行输入, cout<<a[n]这样进行输出:
 一维向量的输入及访问形式示例:

#include<iostream>
#include<vector>
using namespace std;

int main()
{
     vector<int> a(10, 0);      //大小为10初值为0的向量a
     //对其中部分元素进行输入
     cin >> a[2];
     cin >> a[5];
     cin >> a[6];

     //全部输出
     int i;
     for (i = 0; i < a.size(); i++)
     {
         cout << a[i] << " ";
     }
     //也可以用下面方式输出所有向量数据
     vector<int>::iterator t ;
     for(t=a.begin(); t!=a.end(); t++)
         cout<<*t<<" " ;
     //*t 为指针的间接访问形式, 意思是访问t所指向的元素值。
     return 0;
}

 二维向量的输入及访问形式:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
using std::vector;
int main()
{
    vector<vector<int>> arr;  //这里也可以直接定义向量的尺寸
    //初始化
    int row;
    int column;
    cout << "请输入数组的行数和列数:";
    cin >> row >> column;
    //下面是给向量分配存储空间
    arr.resize(row);
    for (int i = 0; i < row; i++)
    {
        arr[i].resize(column);
    }
    //存入元素
    cout << "请输入数组元素:" << endl;
    for (int m = 0; m < row; m++)
    {
        for (int n = 0; n < column; n++)
        {
            cin >> arr[m][n]; //利用cin在命令框中一个个输入
            //也可以是下面的方式直接输入
            //arr[m][n] = m+n  //可以等于m+n,也可以等于其他数字
        }
    }
    return 0;
}

4. 向量的基本操作

a.size()                 //获取向量中的元素个数
a.empty()                //判断向量是否为空
a.clear()                //清空向量中的元素
a = b ;                 //将b向量复制到a向量中
比较
    保持 ==、!=、>、>=、<、<= 的惯有含义 ;
    如: a == b ;    //a向量与b向量比较, 相等则返回1

插入 - insert
    ①、a.insert(a.begin(), 1000);//将1000插入到向量a的起始位置前

    ②、a.insert(a.begin(), 3, 1000);//将1000分别插入到向量元素位置的0-2处(共3个元素)

    ③、 vector<int> a(5, 1) ;
        vector<int> b(10) ;
        b.insert(b.begin(), a.begin(), a.end()) ; //将a.begin(), a.end()之间的全部元素插入到b.begin()前

删除 - erase
    ①、b.erase(b.begin());//将起始位置的元素删除
    ②、b.erase(b.begin(), b.begin()+3);//将(b.begin(), b.begin()+3)之间的元素删除

交换 - swap
        b.swap(a) ;            //a向量与b向量进行交换

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐