数组而不是vector的vector, push_back()的元素.c++

array instead of vector of vector, push_back() of elements. c++

本文关键字:vector back c++ 元素 数组 push      更新时间:2023-10-16

我使用vector的vector方法,出于性能原因,我想将其更改为数组。然而,我未能在试图理解,我怎么能使用数组(动态)和推数据在数组的末尾,如果我不知道有多少数据正在读取我的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);
}

A 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);
    } 
}

如果所有的内部向量总是相同的大小,你可能不想要一个向量的向量,但你仍然可以使用它。

效率低下可能来自于必须维护一个连续的缓冲区并四处移动对象。如果你想在内存中存储大量数据,你可以使用std::deque,尽管在你的情况下,不是所有的数据都是连续的,只是在每个内部向量和另一个向量本身。

如果你在开始push_back之前知道内部向量中的数据大小,你可以使用reserve()进行优化。

你的慢,假设有的话,可能是由糟糕的算法引起的,如果你在内存中访问大量数据,那么缓存会丢失。后者是一个复杂的主题,但可以大大提高性能。