1 vector的构造访问遍历
// vector 容器 连续存储空间 动态数组
#include<iostream>
using namespace std;
#include<vector>
#if 0
int main(){
vector<int> v1; // 无参构造
vector<int >v2(10, 5); //构造的同时初始化10 个5;
// 区间构造
vector<int>v3(v2.begin(), v2.end());
int array[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
vector<int>v4(array, array + sizeof(array) / sizeof(array[0]));
// 访问任意位置的元素
vector<int>v5(v4); // 拷贝构造
cout << v2[1] << endl;
// 打印vector中的元素
for (size_t i = 0; i < v2.size(); ++i){
cout << v2[i]<<" ";
}
cout << endl;
/*cout << v2.size() << endl;
cout << v2.capacity() << endl;
*/
// 使用迭代器反向遍历
auto it = v4.rbegin();
while (it != v4.rend()){
cout << *it<<" ";
it++;
}
cout << endl;
// 使用范围for打印
for (auto e : v4){
cout << e << " ";
}
cout << endl;
// 常规遍历
for (int i = 0; i < v4.size(); ++i){
cout << v4[i]<<" ";
}
cout << endl;
system("pause");
return 0;
}
输出结果
2 使用迭代器对vector进行修改
int main(){
vector<int>v1(5, 1);
for (int i = 0; i < v1.size(); ++i){
cout << v1[i] << " ";
}
cout << endl;
// 使用迭代器进行修改
auto rit = v1.begin();
while (rit != v1.end()){
*rit *= 2;
rit++;
}
auto it = v1.rbegin();
while (it != v1.rend()){
cout << *it << " ";
it++;
}
system("pause");
return 0;
}
输出结果
3 vector 中 的capacity的增长问题 (面试题)
int main()
{
size_t sz;
vector<int> foo;
//foo.reserve(100);// xisn
sz = foo.capacity();
cout << "making foo grow:\n";
for (int i = 0; i < 100; ++i)
{
foo.push_back(i);
if (sz != foo.capacity())
{
sz = foo.capacity();
cout << "capacity changed: " << sz << '\n';
}
}
system("pause");
return 0;
}
输出结果
4 迭代器失效问题
int main(){
vector<int>v1{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
auto it = v1.begin();
// 插入可能会引起扩容,如果扩容,vector以前空间被释放,就会重新分配新空间
// it 迭代器就会失效
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
// 迭代器失效的解决方式:给迭代器重新赋值
it = v1.begin();
while (it != v1.end()){
cout << *it << " ";
it++;
}
cout << endl;
cout << endl;
system("pause");
return 0;
}
输出结果
5 交换两个vector
// swap vector
int main(){
vector<int>v1{ 1, 3, 5, 7, 9 };
vector<int>v2{ 2, 4, 6, 8, 0 };
for (int i = 0; i < v1.size(); ++i){
cout << v1[i] << " ";
}
cout << endl;
v1.swap(v2);
for (int i = 0; i < v2.size(); ++i){
cout << v2[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
6 从vector 中删除元素
// erasing from vector
int main(){
vector<int>v1{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
for (auto e : v1){
cout << e;
}
cout << endl;
// 删除第6个元素
v1.erase(v1.begin() + 6);
for (int i = 0; i < v1.size(); ++i){
cout << v1[i];
}
cout << endl;
vector<int>v2{ 1, 2, 3, 4, 5, 6 };
// 删除前3个元素
v2.erase(v2.begin(), v2.begin() + 3);
for (int i = 0; i < v2.size(); ++i){
cout << v2[i];
}
system("pause");
return 0;
}
输出结果