1、vector是c++标准模板库的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
2、为了使用vector,必须在你的头文件中包含下面的代码:
#include <vector>
vector是属于std命名空间的,因此需要通过通过命名限定,如下完成你的代码:
using std::vector;
vector <T> value;
或者使用:
std::vector <T> value;
或者使用全局的命名域方式:
using namespace std;
vector <T> value;
3、初始化
1: 方式一:
2: vector <int> value; // 初始容量为0
3: 方式二:
4: vector <int> value(100); // 初始容量100,全部初始化为0,可以像数组一样访问,如value[2]访问第三个元素
5: 方式三:
6: vector <int> value(100, 1); // 初始容量100,全部初始化为1、
7: 方式四:
8: vector <int> value;
9: value.reserve(100); // 如果参数小于vector的容量,则不起作用
10: 方式五:
11: double data[] = {1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5};
12: vector <double> value(data, data + 8); // 其中value含有8个元素,初值分别为1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5和8.5
13: 方式六:
14: vector <double> valueCopy(value.begin(), value.end()); // valueCopy将含有和value一样的元素
15: vector <double> valueCopy(value.begin() + 2, value.end() - 1); // end()指向最后一个元素的下一个元素
4、矢量容器的大小和容量
容量(capacity)与大小(size)之间的区别,容量是在不分配更多内存的情况下容器当前所能容纳的最大对象数目,大小是实际存储在容器中的对象数目。因此大小不能大于容量。
empty,可以使用size的返回值为0来测试是否为空矢量,也可以使用empty()来测试
max_size为矢量所能存储的最大长度,取决于元素类型,如int为1073741823,而double为536870911
resize,可以改变矢量大小如果指定一个小于当前大小的新大小,则会从末尾删除足够的元素,使它减小到新的大小,如果新大小大于旧大小,那么会向矢量的末尾添加新的元素以将长度增加到新的大小。如果resize的第二个实参存在的话,则为组成新的元素的值。
如果初始容量为10,那么添加第11个元素时会发生容量的增加,这种情况下会增加容量的一半。因此容量增加到15.
5、访问矢量中的元素
可以使用数组那样用下标运算符来访问,也可以使用at()函数,它的实参是要访问的元素的索引位置。如果使用at函数进行下标,那么在超出合法范围时就会抛出out_of_range类型的异常。
访问第一个和最后一个函数可以分别调用front()和back()函数。
6、插入和删除元素
push_back() | 在最后添加一个元素 |
pop_back() | 删除最后一个元素,并将大小减1 |
clear() | 清空矢量中所有元素 |
insert(value.begin() + 1, 99) | 在第一个元素后面添加99这个元素,要移动所有元素,所以会比较慢 |
erase(value.begin() + 1, value.begin() + 4) | 删除第2,3,4个元素,第二个迭代器指向的元素不包括,也是线性时间,比较慢,可以用list<T>代替 |
swap() | 如first.swap(second),first和second的容量和内容都变化了,大小也变化了。 |