我试图避免使用向量进行复制,所以我(我知道 - 糟糕的做法)在我循环它时改变向量,但我注意到它在每个循环结束时计算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;
}
答案 0 :(得分:0)
我相信你正试图避免使用向量重新分配内存。 如果是这种情况,则应使用reserve(n):它为n个元素预分配内存,从而避免在n个元素或更少的元素时重新分配内存。当你达到n + 1个元素时,它可能会重新分配。 我想请您更具体一点:您对代码的期望是什么?