如何构造带初始容量的std::vector<int>且不将元素初始化为0
实现vector仅预留空间不初始化元素的方法
你需要使用std::vector的reserve()成员方法,该方法只会预分配指定大小的底层内存空间,不会构造任何元素、不会修改vector的有效元素计数size,仅会修改内存容量capacity,既可以避免后续插入元素时的扩容开销,也不会生成无意义的初始化值占用有效元素位置。
修改后的代码示例:
#include <fmt/core.h> #include <vector> int main() { std::vector<int> a; // 预分配可容纳5个int的内存空间,不构造元素,size仍为0 a.reserve(5); fmt::print("size: {}, capacity: {}\n", a.size(), a.capacity()); a.push_back(2); fmt::print("size: {}, capacity: {}\n", a.size(), a.capacity()); // 连续插入4个元素,累计插入5个元素都不会触发扩容 for (int i = 0; i < 4; ++i) { a.push_back(i); } fmt::print("after push 5 elements total, size: {}, capacity: {}\n", a.size(), a.capacity()); return 0; }
运行输出结果:
size: 0, capacity: 5
size: 1, capacity: 5
after push 5 elements total, size: 5, capacity: 5
易混淆接口的区别
std::vector<T>(n)/resize(n):调整vector的有效元素数量size为n,会为n个元素执行初始化操作,同时会将容量扩容到至少n,就是你问题中提到的会生成零值占用元素位置的用法。reserve(n):仅调整vector的底层内存容量capacity为至少n,不会修改有效元素数量size,也不会执行任何元素初始化操作,仅用于提前预留内存避免后续插入的扩容开销。
内容的提问来源于stack exchange,提问作者Ilan Mittelman
相关产品推荐
相关产品推荐

