🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 概述 ## 示例 ``` std::vector<int> v; std::cout << "size:" << v.size() << std::endl; // 输出 0 std::cout << "capacity:" << v.capacity() << std::endl; // 输出 0 // 如下可看出 std::vector 的存储是自动管理的,按需自动扩张 // 但是如果空间不足,需要重新分配更多内存,而重分配内存通常是性能上有开销的操作 v.push_back(1); v.push_back(2); v.push_back(3); std::cout << "size:" << v.size() << std::endl; // 输出 3 std::cout << "capacity:" << v.capacity() << std::endl; // 输出 4 // 这里的自动扩张逻辑与 Golang 的 slice 很像 v.push_back(4); v.push_back(5); std::cout << "size:" << v.size() << std::endl; // 输出 5 std::cout << "capacity:" << v.capacity() << std::endl; // 输出 8 // 如下可看出容器虽然清空了元素,但是被清空元素的内存并没有归还 v.clear(); std::cout << "size:" << v.size() << std::endl; // 输出 0 std::cout << "capacity:" << v.capacity() << std::endl; // 输出 8 // 额外内存可通过 shrink_to_fit() 调用返回给系统 v.shrink_to_fit(); std::cout << "size:" << v.size() << std::endl; // 输出 0 std::cout << "capacity:" << v.capacity() << std::endl; // 输出 0 ``` ## emplace_back push_back() 的底层实现过程比 emplace_back() 更繁琐,换句话说,emplace_back() 的执行效率比 push_back() 高。因此,在实际使用时,建议大家优先选用 emplace_back(), > 由于 emplace_back() 是 C++ 11 标准新增加的,如果程序要兼顾之前的版本,还是应该使用 push_back()。