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

Inner-loop using vector.size() leads to infinite loop

本文关键字:循环 无限循环 vector size 使用      更新时间:2023-10-16

我试图避免复制向量,所以我(我知道——糟糕的做法)在我循环时改变向量,但我注意到它在每个循环结束时计算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;
}

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