一、概述
vector是一个模板类,提供了动态数组的通用功能,特点如下:
1. 在数组末尾添加或删除元素所需的时间是固定的
2. 在数组中间添加或删除元素所需要的时间与该元素后面的元素个数成正比
3. 存储的元素是动态的。
二、示例化
vector <int> vecArray;
// Instantiate a vector with 10 elements (it can grow larger)
vector <int> vecArrayWithTenElements(10);
// Instantiate a vector with 10 elements , each initialized to 90
vector <int> vecArrayWithTenInitializedElements(10, 90);
// Instantiate one vector and initialize it to the content of another
vector <int> vecArrayCopy(vecArrayWithTenInitializedElements);
// Instantiate one vector to 5 elements taken from another
vector <int> vecArraySomeElementsCopied(vecArrayWithTenInitializedElements.begin(),
vecArrayWithTenInitializedElements.begin() + 5);
三、插入元素
1.实例化一个整形vector后,可以使用成员方法push_back把元素插在数组末尾。
vecArray.push_back(5);
vecArray.push_back(8);
2.可以使用数组语法设置
vector <int> vecArray(2);
vecArray[0] = 3;
vecArray[1] = 9;
注意:使用[]下标运算符时,仅当偏移位置位于vector边界内才是最安全的。
3.使用insert函数可以插入到任意位置
初始数组:90 90 90
// Insert 25 at the beginning
vecArray.insert(vecArray.begin(), 25); // 25 90 90 90 90
// Insert 2 numbers of values 45 at the end
vecArray.insert(vecArray.begin(), 2, 45); // 25 90 90 90 90 45 45
// Insert 2 elements from another container in position[1]
vector <int> vecAnother(2, 30);
vecArray.insert(vecArray.begin() + 1, vecAnother.begin(), vecAnother.end());
// 25 30 30 90 90 90 90 45 45
四、访问元素
1. 数组方式
2. 迭代器方式
五、删除元素
可以用pop_back把vector末尾的元素删除。
vector <int> vecArray;
vecArray.push_back(5);
vecArray.push_back(8);
vecArray.pop_back();
六、size和capacity
vector的大小是指vector的实际存储的元素数,而vector的容量指的是在重新分配内存以存储更多元素前vector能够存储的元素数。因此vector的大小小于或等于容量。
如果vector需要频繁分配内存对性能有一定影响,可以使用reserve(number)来增加分配给内部数组的内存,以提高性能。
七、vector和deque
deque是一个STL动态数组类,它与vector非常类似,但是支持在数组开头和末尾插入和删除元素。也就是多了两个成员方法pop_front和push_front。