介绍
Vector
Vectors 包含着一系列连续存储的元素, 其行为和数组类似. 访问 Vector 中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成, 而查找特定值的元素所处的位置或是在 Vector 中插入元素则是线性时间复杂度.
(1)vector 是表示可变大小数组的序列容器.
(2) 就像数组一样, vector 也采用的连续存储空间来存储元素. 也就是意味着可以采用下标对 vector 的元素进行访问, 和数组一样高效. 但是又不像数组, 它的大小是可以动态改变的, 而且它的大小会被容器自动处理.
(3) 本质讲, vector 使用动态分配数组来存储它的元素. 当新元素插入时候, 这个数组需要被重新分配大小为了增加存储空间. 其做法是, 分配一个新的数组, 然后将全部元素移到这个数组. 就时间而言, 这是一个相对代价高的任务, 因为每当一个新的元素加入到容器的时候, vector 并不会每次都重新分配大小.
(4)vector 分配空间策略: vector 会分配一些额外的空间以适应可能的增长, 因为存储空间比实际需要的存储空间更大. 不同的库采用不同的策略权衡空间的使用和重新分配. 但是无论如何, 重新分配都应该是对数增长的间隔大小, 以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的.
(5) 因此, vector 占用了更多的存储空间, 为了获得管理存储空间的能力, 并且以一种有效的方式动态增长. 与其它动态序列容器相比 (deques, lists and forward_lists), vector 在访问元素的时候更加高效, 在末尾添加和删除元素相对高效. 对于其它不在末尾的删除和插入操作, 效率更低. 比起 lists 和 forward_lists 统一的迭代器和引用更好.
用法
头文件
#include <vector>
定义方式
- vector<int> v1; // vector 元素为 int 类型
- vector<string> v2; // vector 元素为 string 类型
- vector<node> v3; // vector 元素为结构体型, 结构体可以自行定义
- vector<int>::iterator it; // 用迭代器方式进行遍历
常用操作
- Constructors // 构造函数
- Operators // 对 vector 进行赋值或比较
- assign() // 对 Vector 中的元素赋值
- at() // 返回指定位置的元素
- back() // 返回最末一个元素
- begin() // 返回第一个元素的迭代器
- capacity() // 返回 vector 所能容纳的元素数量 (在不重新分配内存的情况下)
- clear() // 清空所有元素
- empty() // 判断 Vector 是否为空 (返回 true 时为空)
- end() // 返回最末元素的迭代器 (译注: 实指向最末元素的下一个位置)
- erase() // 删除指定元素
- front() // 返回第一个元素
- get_allocator() // 返回 vector 的内存分配器
- insert() // 插入元素到 Vector 中
- max_size() // 返回 Vector 所能容纳元素的最大数量 (上限)
- pop_back() // 移除最后一个元素
- push_back() // 在 Vector 最后添加一个元素
- rbegin() // 返回 Vector 尾部的逆迭代器
- rend() // 返回 Vector 起始的逆迭代器
- reserve() // 设置 Vector 最小的元素容纳数量
- resize() // 改变 Vector 元素数量的大小
- size() // 返回 Vector 元素数量的大小
- swap() // 交换两个 Vector
举个栗子
代码
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- int main()
- {
- vector <int> v; // 定义 vector
- vector<int>::iterator it; // 定义一个 vector 迭代器
- for(int i = 10; i>= 1; i--) // 插入数据
- v.push_back(i);
- cout<<"输出:";
- for(it=v.begin();it!=v.end();it++) // 输出迭代器的值
- cout<<*it<<" ";
- cout<<endl;
- it-=1;
- cout<<"最后一个的值为:"<<*it<<" "<<endl;
- v.erase(it); // 删除最后一个元素
- cout <<"元素个数:" <<v.size() << endl; // 输出元素个数
- sort(v.begin(), v.end()); //vector 排序
- cout<<"排序后:";
- for(it=v.begin();it!=v.end();it++) // 输出 vector 元素
- cout << *it << " ";
- cout<<endl;
- v.insert(v.begin(),100) ; // 在 pos 位置插入一个 elem
- cout<<"第一个元素为:" <<v.front()<<endl;// 输出第一个元素
- v.pop_back(); // 去掉最后一个元素
- cout << "元素个数:" <<v.size() << endl;// 输出元素个数
- v.clear(); //vector 清空
- cout <<"清空后元素个数:" << v.size() << endl; // 输出元素个数
- return 0;
- }
运行结果
以上.
来源: http://www.jianshu.com/p/d4aadda0fcfa