数组而不是向量的向量,push_back()的元素。 C ++

时间:2014-08-11 13:35:28

标签: c++ arrays vector dynamic-arrays push-back

我使用向量矢量的方法,并且出于性能原因想将其更改为数组。但是我没有尝试理解,如果我不知道在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);
}

2 个答案:

答案 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}}进行优化。

假设存在任何问题,您的缓慢可能是由于算法不佳造成的,如果您在内存中访问大量数据,则缓存未命中。后者是一个复杂的主题,但可以带来性能的重大改进。