STLvector
vector容器介绍
vector是顺序容器的一种。vector是可变长的动态数组,支持随机访问迭代器,所有 STL 算法都能对vector进行操作。要使用 vector,需要包含头文件vector。
在vector容器中,根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多数情况下也是常数,总体来说速度很快。
在中间插入或删除元素时,因为要移动多个元素,因此速度较慢,平均花费的时间和容器中的元素个数成正比。
在vector容器中,用一个动态分配的数组来存放元素,因此根据下标访问某个元素的时间是固定的,与元素个数无关。
vector容器在实现时,动态分配的存储空间一般都大于存放元素所需的空间。例如,哪怕容器中只有一个元素,也会分配32个元素的存储空间。这样做的好处是,在尾部添加一个新元素时不必重新分配空间,直接将新元素写入适当位置即可。在这种情况下,添加新元素的时间也是常数。
但是,如果不断添加新元素,多出来的空间就会用完,此时再添加新元素,就不得不重新分配内存空间,把原有内容复制过去后再添加新的元素。碰到这种情况,添加新元素所花的时间就不是常数,而是和数组中的元素个数成正比。
至于在中间插入或删除元素,必然涉及元素的移动,因此时间不是固定的,而是和元素个数有关。
vector有很多成员函数,如下表所示:
成员函数 | 作用 |
---|---|
vector() | 无参构造函数,将容器初始化为空 |
vector(int n) | 将容器初始化为有 n 个元素 |
vector(int n, const T &val) | 假定元素的类型是T,此构造函数将容器初始化为有n个元素,每个元素的值都是val |
vector(iterator first, iterator last) | first和last可以是其他容器的迭代器。一般来说,本构造函数初始化的结果就是将vector容器的内容变成与其他容器上的区间[first,last)—致 |
void clear() | 删除所有元素 |
bool empty() | 判断容器是否为空 |
void pop_back() | 删除容器末尾的元素 |
void push_back(const T &val) | 将 val 添加到容器末尾 |
int size() | 返回容器中元素的个数 |
T &front() | 返回容器中第一个元素的引用 |
T &back() | 返回容器中最后一个元素的引用 |
iterator insert(iterator i, const T &val) | 将val插入迭代器i指向的位置,返回i |
iterator insert(iterator i, iterator first, iterator last) | 将其他容器上的区间[first, last)中的元素插入迭代器i指向的位置 |
iterator erase(iterator i) | 删除迭代器i指向的元素,返回值是被删元素后面的元素的迭代器 |
iterator erase(iterator first, iterator last) | 删除容器中的区间[first, last) |
void swap(vector |
将容器自身的内容和另一个同类型的容器v互换 |
例子
基本用法
1 | #include <iostream> |
嵌套用法
```
include
include
using namespace std;
int main()
{
vector\<vector
for(int i = 0;i < v.size(); ++i)
for(int j = 0; j < 4; ++j)
v[i].push_back(j);
for(int i = 0;i < v.size(); ++i) {
for(int j = 0; j < v[i].size(); ++j)
cout << v[i][j] << “ “;
cout << endl;
}
return 0;
}```
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yxhlfx@163.com
文章标题:STLvector
本文作者:红尘追风
发布时间:2016-10-05, 14:32:12
原始链接:http://www.micernel.com/2016/10/05/STLvector/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。