STL vector
使用vector时需要包含头文件<vector>
vector的特点
vector动态数组类:
1、无论数组中存在多少元素,在数组末尾添加新元素时所需时间都是固定的。
2、在数组中间添加或者删除元素时,与该元素后面的元素个数成正比。
3、储存的元素是动态的,vector类负责管理内存。vector的初始化
下面的代码介绍了vector的几种初始化方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14//默认初始化
vector<int> intVec;
//初始化时设置至少包含的元素数(并没有限制大小),每个元素初始值默认为0
vector<int> intVec1(10);
//同上,并设置每个元素的初始化值
vector<int> intVec2(10, 66);
//使用另外一个vector来初始化
vector<int> intVec3(intVec2);
//使用另一个vector的两个迭代器来初始化
vector<int> intVec4(intVec2.cbegin(), intVec2.cbegin() + 5);
cbegin()和cend()是C++11新增的,它们返回一个const的迭代器,不能用于修改元素。
vector插入元素
使用成员函数push_back()在容器末尾插入元素;使用insert()在指定位置插入元素。
1
2
3
4
5
6
7
8
9
10
11
12
13
14vector<int> intVec(5);
intVec.push_back(66);
cout << intVec.size() << endl; //6
//在指定位置插入元素
intVec.insert(intVec.begin(), 67);
//在指定位置插入指定个数的某个元素
intVec.insert(intVec.begin(), 2, 66);
//在指定位置插入另一个vector的内容(使用迭代器指定范围)
vector<int> anoVec(3, 65);
intVec.insert(intVec.begin(),
anoVec.begin(), anoVec.end());
使用insert插入元素时,效率较低,与其特点有关。
访问vector中的元素
使用下标用算符[]访问元素,超出容器边界时结果不确定。
使用成员方法at()访问元素,超出容器边界时将会报错。
使用迭代器访问元素。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19vector<int> intVec;
intVec.push_back(64);
intVec.push_back(65);
intVec.push_back(66);
//使用 [] 访问元素
for (size_t i = 0; i < intVec.size(); ++i) {
cout << intVec[i] << endl;
}
//使用 at() 访问元素
for (size_t i = 0; i < intVec.size(); ++i) {
cout << intVec.at(i) << endl;
}
//使用迭代器访问元素
for (vector<int>::const_iterator pos = intVec.begin()
; pos != intVec.end()
; ++pos)
{
cout << *pos << endl;
}删除vector中的元素
使用pop_back()从vector中删除元素所需要的时间是固定的。
不能使用偏移位置和元素数删除指定个数的元素。1
2
3
4
5
6
7
8
9
10
11
12
13vector<int> intVec;
intVec.push_back(64);
intVec.push_back(65);
intVec.push_back(66);
//删除vector末尾的元素
intVec.pop_back();
//删除迭代器指向的元素
intVec.erase(intVec.begin());
//删除两个迭代器之间的元素
intVec.erase(intVec.begin(), intVec.begin() + 2);大小和容量的区别
可以通过成员函数size()和capacity()来获取vector的大小和容量。
容量总是大于等于大小,当当前容量不足时,重新分配容量时,会分配比当前所需容量更大的容量(比如容量满时再插入数据时,可能会分配两个元素的容量,或者更多)。
可使用成员函数reserve(number),设置当前容器的容量(如果传入的number小于size的话,默认使用size的值。)
STL deque
发音:/dek/
使用时要包含头文件
deque与vector极其相似,只是可以使用成员函数push_front()和pop_frone()在开头插入和删除元素。