目录
1.vector的使用
1.1 vector的构造
头文件:#include<vector>
vector() (重点) | 无参构造 |
vector(size_type n, const value_type& valvalue_type()) | 构造并初始化n个val |
vector (const vector& x); (重点) | 拷贝构造 |
vector (InputIterator first, InputIterator last) | 迭代器进行初始化构造 |
int main()
{
vector<int>a1;
vector<int>a2(6, 1);
vector<int>a3(a2.begin(), a2.end());
}
1.2 vector的遍历
有三种方法,for循环,范围for,迭代器
int main()
{
vector<int>a2(6, 1);
//方法一:
for (int i = 0; i < a2.size(); i++) {
cout << a2[i] << ' ';
}
cout << endl;
//方法二:
for (auto num : a2)
{
cout << num << " ";
}
cout << endl;
//方法三:
vector<int>::iterator ti = a2.begin();
while (ti != a2.end())
{
cout << *ti << ' ';
*ti++;
}
cout << endl;
}
1.3 vector空间增长问题
size | 获取数据个数 |
capacity | 获取容量大小 |
empty | 判断是否为空 |
resize | 改变vector的size |
reserve | 改变vector的capacity |
vector扩容问题
向v1中插入0-100,并输出每次capacity改变的值
int main()
{
vector<int>v1;
int sz = v1.capacity();
for (int i = 0; i <= 100; i++) {
v1.push_back(i);
if (sz != v1.capacity())
{
sz = v1.capacity();
cout << "capacity changed: " << sz << endl;
}
}
}
运行结果:
运行发现,VS下capacity是按1.5倍增长的,在g++中是按2倍增长的。reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代价缺陷问题。resize在开空间的同时还会进行初始化,影响size。
1.4 接口
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
本篇完