我使用向量矢量的方法,并且出于性能原因想将其更改为数组。但是我没有尝试理解,如果我不知道在while循环期间正在读取多少数据,我怎么能在数组的末尾使用数组(动态)和推送数据。这里的片段如下。你可以解释如何在阵列上执行它,因为 push_back()仅适用于矢量?非常感激。
std::vector<vector<double>> v1;
while (1)
{
..../* some code, break condition aswell*/
vector<double> tmp;
while ( .../*new data available*/ )
{
...
tmp.push_back(data);
}
v1.push_back(tmp);
}
答案 0 :(得分:3)
std::vector<T>
是动态数组。可能会加速您的代码的是:
std::vector<vector<double>> v1;
while (1)
{
..../* some code, break condition aswell*/
v1.push_back(vector<double>());
while ( .../*new data available*/ )
{
...
v1.back().push_back(data);
}
}
答案 1 :(得分:2)
如果所有内部向量总是大小相同,那么您可能不需要向量向量,但仍然可以使用它。
效率低下可能来自于必须维护一个连续的缓冲区并移动对象。如果你有很多数据试图存储在内存中,你可以使用std::deque
代替push_back
,尽管在你的情况下并非所有数据都是连续的,只是在每个内部向量和另一个向量本身内。
如果您在开始执行reserve()
之前知道内部向量中的数据大小,则可以使用{{1}}进行优化。
假设存在任何问题,您的缓慢可能是由于算法不佳造成的,如果您在内存中访问大量数据,则缓存未命中。后者是一个复杂的主题,但可以带来性能的重大改进。