簡體   English   中英

使用 vector.size() 的內循環導致無限循環

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

我試圖避免使用向量進行復制,所以我(我知道 - 糟糕的做法)在循環時改變向量,但我注意到它在每個循環結束時評估 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 個元素時,它可能會重新分配。 我想請你更具體一點:你對你的代碼有什么期望?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM