矢量大小在for循环中创建问题

时间:2014-11-29 20:57:10

标签: c++ vector

我创建了一个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);

    }
}

3 个答案:

答案 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;
}