使用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个元素时,它可能会重新分配。我想请您说得更具体一些:您对代码的期望是什么?
相关文章:
- 循环无限运行C++解决骑士之旅问题
- 过载'operator new'如何导致无限循环?
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- 超出 int 的值范围后的无限循环
- 为什么这段代码会导致无限循环?
- 运行无限循环的最小二叉树问题
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 连接线程时的无限循环
- 为什么这种方法会进入无限循环?
- 由于QTextStream的无限循环
- Qt 在另一个线程中无限循环
- 从文件 C++ 读取时的无限循环