vector 容器

匆匆过客 提交于 2020-03-30 15:23:22

向量vector 可以理解为一个能存放任意类型的动态分配的数组。

这里展示一些常用的函数

 

 

加入头文件

#include <vector>

 


 

 

首先创建一个vector

    std::vector<int> v;

表示我要创建一个向量,这个向量名字叫v,存放的全都是int型的数据。

这里的 int 可以换成 string  double  float 等任意数据类型。

 


 

 

我们知道数组在定义的时候需要写明数组的容量。向量也可以这样做

    std::vector<int> v(10);

表示我定义了一个名字叫 v 的向量,v里面有 10 个 int 型的数据。

 


 

 

也可以在定义的同时,就初始化向量的数据

    std::vector<int> v(10,20);

表示我定义了一个含有10个元素 ,且每一个元素值都是 int 型的 20 的向量 名字叫 v。

 


 

 

元素的个数

std::vector<int>::size_type count = v.size();

前面的 std::vector<int>::size_type 表示数据类型 可以理解为无符号整形

 


 

 

查看首位元素

v.front();      //返回首元素的值    
v.back();      //返回尾元素的值

 


 

 

在向量的末尾添加一个元素 30

    v.push_back(30);

只能在末尾添加,添加之后向量的size就变化了

int main(int argc,char *argv[])
{
    std::vector<int> v(10,20);
    cout<<v.size()<<endl;
    v.push_back(30);
    cout<<v.size()<<endl;
    return 0;
}

输出结果为

10
11

可见改变了向量的size。

 


 

 

把刚才添加的元素删掉

v.pop_back();

删除最后一个元素,看下面示例代码:

int main(int argc,char *argv[])
{
    std::vector<int> v(10,20);
    cout<<v.size()<<endl;
    v.push_back(30);
    cout<<v.size()<<endl;
    v.pop_back();
    cout<<v.size()<<endl;
    return 0;
}

输出结果为

10
11
10

 


 

 

清空所有的元素

    v.clear();

示例代码:

int main(int argc,char *argv[])
{
    std::vector<int> v(10,20);
    cout<<v.size()<<endl;
    v.push_back(30);
    cout<<v.size()<<endl;
    v.pop_back();
    cout<<v.size()<<endl;
    v.clear();
    cout<<v.size()<<endl;
    return 0;
}

输出结果:

10
11
10
0

此时向量 v  中已经没有任何元素

 


 

 

判断向量是否为空

bool isempty = v.empty();

 


 

 

访问指定位置的元素

    std::vector<int> v(10);

    for (int i = 13; i != 20; ++i)
    {
        v.push_back(i);
    }

    cout<<v.at(16)<<endl;

访问到第16个元素,其值为19

 


 

 

利用迭代器访问向量元素

首先定义一个迭代器

    vector<int>::iterator iter;

定义了一个类型为  vector<int> 的迭代器 名字叫 iter

注意迭代器的数据类型应该和向量相同

然后使用迭代器遍历向量

    for (iter = v.begin(); iter != v.end(); ++iter)
    {
        cout<<*iter<<endl;
    }

 


 

 

插入元素

v.insert();

直接看一个例子

int main(int argc,char *argv[])
{
    std::vector<int> v(10);

    for (int i = 13; i != 20; ++i)
    {
        v.push_back(i);
    }

    v.insert(v.begin(),19);        //在最前面增加一个元素 19
    v.insert(v.begin()+1,17);    //在第一个元素后面 加一个元素 17
    v.insert(v.end(),2,3);        //在最后面增加2个元素 3
    for(vector<int>::iterator i = v.begin();i!=v.end();i++)
    {
        cout<<*i<<" ";
    }

    return 0;
}

运行结果如下:

19 17 0 0 0 0 0 0 0 0 0 0 13 14 15 16 17 18 19 3 3 

可以看到,初始化时的10个0并没有改变,用push_back() 加入的元素在后面

用insert 插入的元素分别在第一个 第二和最后

 


 

 

删除某个元素

erase(iterator __position);
erase(iterator __first, iterator __last);

看下面的例子

int main(int argc,char *argv[])
{
    std::vector<int> v(10);

    for (int i = 13; i != 20; ++i)
    {
        v.push_back(i);
    }

    v.insert(v.begin(),19);        //在最前面增加一个元素 19
    v.insert(v.begin()+1,17);    //在第一个元素后面 加一个元素 17
    v.insert(v.end(),2,3);        //在最后面增加2个元素 3

    v.erase(v.begin()+1);                //删除第2个元素 (也就是刚才第二个添加的17)
    v.erase(v.begin()+1,v.begin()+10);    //删除第2到第11个元素 (总共删除了9个元素)

    for(vector<int>::iterator i = v.begin();i!=v.end();i++)
    {
        cout<<*i<<" ";
    }

    return 0;
}

运行结果如下

19 0 13 14 15 16 17 18 19 3 3

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!