使用vector.size()的内循环导致无限循环

时间:2015-09-28 18:39:36

标签: c++ loops vector

我试图避免使用向量进行复制,所以我(我知道 - 糟糕的做法)在我循环它时改变向量,但我注意到它在每个循环结束时计算size()。此外,即使我在循环之外声明它并将其分配给另一个变量,它仍然会重新评估。更令人惊讶的是,即使我宣布它为const,它也会重新评估。有人能告诉我为什么会这样吗?在不创建单独的向量的情况下添加到向量的最佳方法是什么,然后在每个内部循环完成后组合它们?示例代码:

#include <vector>
int main()
{
    std::vector<int> v {0};
    // infinite loop
    for (int i = 0; i < 100; ++i)
    {
        const size_t sz = v.size();
        for (size_t j = 0; j < sz; ++j)
            v.push_back(i);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我相信你正试图避免使用向量重新分配内存。 如果是这种情况,则应使用reserve(n):它为n个元素预分配内存,从而避免在n个元素或更少的元素时重新分配内存。当你达到n + 1个元素时,它可能会重新分配。 我想请您更具体一点:您对代码的期望是什么?