在std :: vector <std :: vector <TYPE >>中重新设计内部向量的内存

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)

在哪里outerSizeinnerSize给予整数.这对我不起作用,因为默认构造函数不适用.但是std::reserve不提供这样的界面.

这是为所有内部向量保留记忆的好方法吗?

vecs.resize(outerSize);
for (auto &elem : vecs) {
    elem.reserve(innerSize);
}
Run Code Online (Sandbox Code Playgroud)

UKM*_*key 5

我能想到的唯一选择是你在内部创建一个包装类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或类似的东西.

正如其他人所说的那样; 你的方式很好.