美文网首页
在C++中实现Python中的列表(List)

在C++中实现Python中的列表(List)

作者: LabVIEW_Python | 来源:发表于2022-01-23 14:14 被阅读0次

Python的列表非常好用,可以存放任意类型的数据,可以能够动态增加和删减数据。C++的STL中有一个vector,它是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。

那到底什么是vector呢?
Vector(向量)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,Vector是一个能够存放任意类型的动态数组 ,是C++ array容器的“升级版”。array容器实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预.

vector对象函数常用成员函数:

  • begin() 返回指向容器中第一个元素的迭代器。
  • end() 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。
  • rbegin() 返回指向最后一个元素的迭代器。
  • rend() 返回指向第一个元素所在位置前一个位置的迭代器。
  • cbegin() 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
  • cend() 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
  • crbegin() 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
  • crend() 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
  • size() 返回实际元素个数。
  • resize() 改变实际元素的个数。
  • capacity() 返回当前容量。
  • empty() 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。
  • shrink _to_fit() 将内存减少到等于当前元素实际所使用的大小。
  • operator[ ] 重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。
  • at() 使用经过边界检查的索引访问元素。
  • front() 返回第一个元素的引用。
  • back() 返回最后一个元素的引用。
  • data() 返回指向容器中第一个元素的指针。
  • assign() 用新元素替换原有内容。
  • push_back() 在序列的尾部添加一个元素。
  • pop_back() 移出序列尾部的元素。
  • insert() 在指定的位置插入一个或多个元素。
  • erase() 移出一个元素或一段元素。
  • clear() 移出所有的元素,容器大小变为 0。
  • swap() 交换两个容器的所有元素。
  • emplace() 在指定的位置直接生成一个元素。
  • emplace_back() 在序列尾部生成一个元素。

范例程序如下:

#include<vector>
#include<string>
#include<iostream>

using namespace std;

int main()
{
    //创建vector
    vector<string> labels{"speedlimit","crosswalk","trafficlight","stop"};

    //使用迭代器遍历vector
    cout << "使用迭代器遍历vector:" << endl;
    for (auto i = labels.begin(); i < labels.end(); i++)
    {
        cout << *i << endl;
    }

        //像普通数据那样通过[]访问元素
    cout << endl << "像普通数据那样通过[]访问元素:" << endl;
    cout << "labels[0] is:" << labels[0] << endl;

    //使用经过边界检查的索引访问元素
    cout << endl << "使用经过边界检查的索引访问元素:" << endl;
    cout << "labels.at(0) is:" << labels.at(0) << endl;

    //向vector开头插入:Fake
    labels.insert(labels.begin(), "Fake");
    cout << endl << "向vector开头插入:Fake:" << endl;
    cout << "labels.at(0) is:" << labels.at(0) << endl;

    cout << endl << "使用迭代器遍历vector:" << endl;
    for (auto i = labels.begin(); i < labels.end(); i++)
    {
        cout << *i << endl;
    }

    cout << endl << "使用cbegin迭代器遍历vector:" << endl;
    for (auto i = labels.cbegin(); i < labels.cend(); i++)
    {
        cout << *i << endl;
    }

    cout << endl << "auto遍历vector:" << endl;
    for (auto label: labels)
    {
        cout << label << endl;
    }

    return 0;
}
运行结果如下: vector范例运行结果

相关文章

网友评论

      本文标题:在C++中实现Python中的列表(List)

      本文链接:https://www.haomeiwen.com/subject/lpymhrtx.html