C++ 中 vector of vector 的哪个顺序
Which order for vector of vector in C++
我正在使用结构 std::vector< std::vector<double> >
将二维数据存储在大小为 NxM 的 C++ 代码中。如果 N 与 M 非常不同,是否存在与我存储数据的顺序相关的任何性能问题?
例如,假设 N = 3 和 M = 100000,我认为构建 3 个大小为 100000 的向量比构建 100000 个大小为 3 的向量更快。但是例如,如果我使用了很多 push_back
来填充它们(假设我不知道初始大小),另一种方法不是更快吗?
I suppose it is faster to build 3 vectors of size 100000 than 100000
vectors of size 3.
几乎可以肯定,是的(而且相当如此)!
... if I am using a lot of push_back to fill them (assuming I don't
know the initial size).
如果您至少知道(或怀疑)最大大小 可能是多少,您可以随后使用 reserve(nMax)
function before your loop with the push_back
calls, then call shrink_to_fit(nAct)
来释放不需要的内存。这种方法将减少由(可能很多)重新分配调用引起的开销。
我正在使用结构 std::vector< std::vector<double> >
将二维数据存储在大小为 NxM 的 C++ 代码中。如果 N 与 M 非常不同,是否存在与我存储数据的顺序相关的任何性能问题?
例如,假设 N = 3 和 M = 100000,我认为构建 3 个大小为 100000 的向量比构建 100000 个大小为 3 的向量更快。但是例如,如果我使用了很多 push_back
来填充它们(假设我不知道初始大小),另一种方法不是更快吗?
I suppose it is faster to build 3 vectors of size 100000 than 100000 vectors of size 3.
几乎可以肯定,是的(而且相当如此)!
... if I am using a lot of push_back to fill them (assuming I don't know the initial size).
如果您至少知道(或怀疑)最大大小 可能是多少,您可以随后使用 reserve(nMax)
function before your loop with the push_back
calls, then call shrink_to_fit(nAct)
来释放不需要的内存。这种方法将减少由(可能很多)重新分配调用引起的开销。