当前位置:首页 > C++ > 正文内容

C++ vector

admin2年前 (2020-08-22)C++746

vector是一个容器,类似于数组,使用的顺序存储结构,可以看做是可以动态拓展的数组,使用vector的优点是其以常数时间进行索引,缺点是在中间进行插入和删除操作代价比较高,但是如果插入和删除发生在尾端速度仍然较快。

使用时需要包含头文件#include<vector>

初始化方式:

vector<int>v1;

当然int可以换成其它的类型。

其它初始化方式:https://lovedm.club/?id=87

常用操作:

v1.push_back()   //在数组的最后添加一个数据
v1.pop_back()    //去掉数组的最后一个数据 
v1.front()     //返回第一个元素(栈顶元素)
v1.begin()           //得到数组头的指针,用迭代器接受
v1.end()             //得到数组的最后一个单元+1的指针,用迭代器接受
v1.clear()        // 移除容器中所有数据
v1.empty()         //判断容器是否为空
v1.erase(pos)        //删除pos位置的数据
v1.erase(beg,end)// 删除[beg,end)区间的数据
v1.size()         //回容器中实际数据的个数
v1.insert(pos,data) //在pos处插入数据

如下的例子:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    //创建一个int型的向量存储容器
    vector<int> v;
    v = {0, 3, 5, 6, 8, 9, 7, 4, 5, 3};
    cout << "The origin vector:" << endl;
    for (int i = 0; i < 10; i++)
    {
        cout << v[i] << " ";
    }
    cout << endl
         << endl;

    //push_back()在数组最后添加数据
    int a;
    cout << "Please enter the element you want to add:" << endl;
    cin >> a;
    v.push_back(a);
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << endl
         << endl;

    //pop_back()去掉数组最后一个数据
    cout << "The last 3 elements will be romoved: " << endl;
    for (int i = 0; i < 3; i++)
    {
        v.pop_back();
    }
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << endl
         << endl;

    //front()返回第一个元素,back()返回最后一个元素
    cout << "The first element:" << v.front() << endl
         << "The last element:" << v.back() << endl
         << endl;

    //在指定位置插入数据,第一个参数是用迭代器表示的位置,第二个参数是要插入的数据
    cout << "Insert an element:" << endl;
    v.insert(v.begin() + 2, 4);
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << endl
         << endl;

    //empty()判断是否为空,返回布尔值
    bool isEmpty = v.empty();
    cout << isEmpty << endl
         << endl;

    //size()容器中实际数据个数
    cout << "Now v has " << v.size() << " elements." << endl;
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " ";
    }

    cout << endl
         << endl;

    //clear()清除所有元素
    cout << "Clear all elements." << endl;
    v.clear();
    cout << "Now v has " << v.size() << " elements." << endl;
    cout << endl;

    //重新赋值
    cout << "Reassignment." << endl;
    int b[10] = {2, 3, 6, 9, 4, 1, 3, 5, 7, 0};
    for (int i = 0; i < 10; i++)
    {
        v.push_back(b[i]);
    }

    //vector是支持迭代器的,可使用algorithm头文件下的sort()进行排序
    cout << "before order:" << endl;
    for (int i = 0; i < 10; i++)
    {
        cout << v[i] << " ";
    }
    cout << endl;
    sort(v.begin(), v.end());
    cout << "after order:" << endl;
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << endl
         << endl;

    //可使用algorithm头文件下的reverse()进行翻转序列
    cout << "reverse vector:" << endl;
    reverse(v.begin(), v.end());
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << endl
         << endl;

    //声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
    cout << "Use iterator to traverse all elements:" << endl;
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl
         << endl;

    cout << v.size() << endl;
    cout << *(v.begin()) << endl;
    cout << *(v.end() - 1);
    system("pause");
    return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由lovedm.club发布,如需转载请注明出处。

本文链接:https://lovedm.club/?id=76

分享给朋友:
返回列表

没有更早的文章了...

下一篇:C++ vector 初始化

“C++ vector” 的相关文章

C++读取ASCII格式DEM数据

C++读取ASCII格式DEM数据

要使用OpenGL显示DEM,就把tif的DEM转成了ASCII格式的,用的是ArcMap工具箱里的栅格转ASCII,转出来的格式是这样的:用了6行来描述数据,如下:第一行:数据的列数ncols第二行:数据的行数 nrows第三行:数据左下角的X值xllcorner第四行:数据左下角的Y值yllco...

C++计算程序运行的时间

最近在程序中有个读取文件的操作,想知道耗费的时间,查找之后大家都在用C++11中的库chrono,找了个能运行的现成写好的类:链接代码如下:#include <iostream> #include <chrono> using names...

C++ 计算点到空间直线的距离

最近的工作中需要计算空间中点到直线的距离,网上找了个算法:链接很简单,就是余弦定理算出余弦,知道余弦算出正弦,然后求出高也就是距离。当然这里不考虑效率问题,实验性的代码,先能用再优化。struct Point {     double ...

C++ 派生类的析构函数的执行顺序

C++ 派生类的析构函数的执行顺序

C++中派生类是不会继承父类的构造函数和析构函数的,这一点要明确。派生类中构造函数的执行顺序是先父类的构造函数然后当前类,析构函数则相反。举例如下:#include <iostream> using namespace std; class&nb...

C++常量

关于常量的一些形式以及含义在此记录一下:#include <iostream> using namespace std; int main() { //常量,不能改变值 const int a =&n...

C++ 拷贝构造函数

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。通常用于:通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从函数返回这个对象。如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有...