我有一个向量载体:
std::vector<std::vector<T>> v;
我想用5个项目(T的5个向量)初始化这个向量。这些向量中的每一个将包含0到10个项目。显然,我需要内部向量保留 10而不是大小 10。我不需要不必要的重新分配或副本发生。换句话说,我需要安置建筑。
由于std::vector
没有为构造函数提供所需的项目数量,所以我提出了这个想法:
std::vector<std::vector<T>> v(5,
[](){
std::vector<T> temp;
temp.reserve(10);
return temp;
}());
问题:
答案 0 :(得分:5)
话虽如此,你根本没有按照你的目的去做。如果您检查capacity()
个v
个元素,则会看到它们未设置为10
。那是因为vector
的复制构造函数没有被定义为逐字复制容器 - 它复制了它的元素。
要做你想做的事,你需要在构建这些向量后调用reserve()
:
std::vector<std::vector<T>> v(5);
for(auto& vec : v) {
vec.reserve(10);
}
它具有更少的代码和更易读的额外好处。