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;
}
运行结果如下:
![](https://img.haomeiwen.com/i10758717/25cecf38c1174e79.png)
网友评论