sch*_*312 9 c++ memory-management vector c++11
我喜欢为a中的内部向量保留内存,std::vector<std::vector<TYPE>>以避免在后续期间进行大量单个内存分配push_back.我完全不知道innerSize矢量,但我可以给出一个很好的估计.
std::resize 可以用作
vecs.resize(outerSize, std::vector<TYPE>(innerSize));
Run Code Online (Sandbox Code Playgroud)
在哪里outerSize和innerSize给予整数.这对我不起作用,因为默认构造函数不适用.但是std::reserve不提供这样的界面.
这是为所有内部向量保留记忆的好方法吗?
vecs.resize(outerSize);
for (auto &elem : vecs) {
elem.reserve(innerSize);
}
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一选择是你在内部创建一个包装类std::vector; 它保留在建设中.导致类似的东西
struct TableRow {
std::vector<TYPE> data;
TableRow() {
data.reserve(SIZE);
}
}
std::vector<TableRow> myVectorOfVectors;
Run Code Online (Sandbox Code Playgroud)
另外一个好处就是你的内部向量得到一个你能理解的名字(例如TableRow); 但缺点是,除非你愿意参加继承游戏std::vector(如果有疑问,不要这样做); 你对包装类的使用必须有点尴尬,因为你需要添加一个.data或类似的东西.
正如其他人所说的那样; 你的方式很好.