我创建了一个int类型的向量,并为向量显式声明了大小为3。 for循环假设循环直到x等于或大于3.不幸的是,for循环保持运行3。任何人都可以详细说明为什么会发生这种情况?我打算用它来说它是“u.size”,它正在创造这个问题,但是如果我宣布一个向量的大小,为什么会这样呢?
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> u (3);
for(size_t x = 0; x < u.size();x++)
{
int g = x;
u.push_back(g);
}
}
答案 0 :(得分:5)
您经常致电push_back
,更改size
。
如果你打算填写这样的矢量,你可以简单地执行以下操作:
vector<int> u;
for(size_t x = 0; x < 3; x++) {
u.push_back(x);
}
或者,或者,
vector<int> u(3); // the constructor fills the vector with 3 default-initialized elements
for(size_t x = 0; x < u.size(); x++) {
u[x] = x;
}
答案 1 :(得分:3)
push_back
在向量的末尾附加元素,因此其大小不断扩展。每次迭代都会计算for
循环的退出条件,因此循环永远不会终止,因为每次迭代时向量都会增加1个元素。
你要么:
vector<int> u;
for(int i=0; i<3; ++i)
u.push_back(i);
允许矢量自身展开,或者从头开始创建正确大小的矢量,并将元素存储在相应的位置:
vector<int> u(3);
for(size_t i=0; i<u.size(); ++i)
u[i]=i;
答案 2 :(得分:1)
正如其他答案所指出的,你正在增加向量的大小。
根据您的需求填充容器的最佳方法可能是使用std::iota
中的<numeric>
。
工作实例:
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> u(3);
iota(u.begin(), u.end(), 0); // Start with value 0
return 0;
}