我有一个矢量矢量:
std::vector<std::vector<T>> v;
Run Code Online (Sandbox Code Playgroud)
我想用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;
}());
Run Code Online (Sandbox Code Playgroud)
问题:
话虽这么说,你根本就没有做你打算做的事情.如果您检查capacity()的v的元素,你会发现他们不设置10.那是因为vector没有定义复制构造函数来逐字复制容器 - 它复制了它的元素.
要做你想做的事,你需要reserve()在构造这些向量后调用:
std::vector<std::vector<T>> v(5);
for(auto& vec : v) {
vec.reserve(10);
}
Run Code Online (Sandbox Code Playgroud)
它具有更少的代码和更易读的额外好处.