此文总结常用vector操作,是前一篇的续作!只有代码,详细请看代码中的注释。
[cpp] view plaincopy/*
* file_name: vector_test.cpp
*
* Created on: 2014年6月28日 下午3:34:23
* Author: The_Third_Wave,
* Last modified: 2014年6月28日 下午3:34:23
#include
#include
#include "Headers/Myfunc.h"
#include "Headers/Person.h"
void output(const std::vector &vec)
// 因为是输出而不是修改,定义形参为常量引用,提高可靠性(const)和效率(&)!
{
std::cout << "size: " << vec.size()<< ", capacity: " <
}
int main()
{
std::vector vec = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
pr_vector(vec);
// 访问首位元素,原生方法之vec.front()和vec.back() 使用前一般最好做元素检查vec.size()
std::cout << vec.front() << std::ends << vec.back() << std::endl;
// 通过迭代器【注意:*(--vec.end())】, 使用前一般最好做元素检查vec.size()
std::cout << *vec.begin() << std::ends << *(--vec.end()) << std::endl;
auto a = vec.size(); // 让编译器自动分析表达式所属类型
auto b = vec.capacity(); // 不重新分配内存的话,vector可以保存多少元素
std::cout << "size: " << a << std::ends << "capacity: " <
vec.reserve(50); // 分配至少能容纳n个元素的内存空间
output(vec);
vec.shrink_to_fit(); // 将capacity()减少为size()相同大小
output(vec);
vec.reserve(50); // 分配至少能容纳50个元素的内存空间
// 以下添加元素
for (decltype(vec.size()) ix = 0; ix != 40; ++ix) // decltype从表达式类型推导出变量类型
{
vec.push_back(ix*ix);
}
pr_vector(vec);
output(vec); // s输出证明没超过size,vector就不会分配超额的空间
// 我们不分配空间,看看自动管理
for (decltype(vec.size()) ix = 0; ix != 40; ++ix) // decltype从表达式类型推导出变量类型
{
vec.push_back(ix*ix);
}
pr_vector(vec);
output(vec); // 输出表示分配了超额的空间,【测试表明:分配的空间为当前的2倍,也就意味着越大越浪费】
// 以下重新初始化,开始插入操作的学习【并学习及几种赋值的操作方法】
std::vector vec2 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 重新初始化
pr_vector(vec); pr_vector(vec2);
std::swap(vec, vec2); // 【快速】交换两容器的数据 swap(a, b)
pr_vector(vec); pr_vector(vec2);
vec2.assign(vec.begin(), vec.end()); // 参数为另外一个同类型vector的迭代器
pr_vector(vec); pr_vector(vec2);
vec.assign({0, 0, 0, 0, 0}); // 参数为初始化列表
pr_vector(vec);