如何正确访问向量的元素?

时间:2012-08-12 00:25:57

标签: c++

int main() {

    vector <int> multiples(1);

    cout << multiples[0];

}

当我希望它为1时返回0.当我用一个元素初始化向量时,会发生这种情况,但我可以访问第二个元素:

int main() {

    vector <int> multiples(1, 4);

    cout << multiples[1]; // 4

}

此外,当我尝试访问向量中不存在的元素时,我得到最右边元素的值(在本例中为4)。但我似乎无法获得第一个元素。任何人都可以解释原因吗?

4 个答案:

答案 0 :(得分:4)

vector <int> multiples(1);

创建一个大小为1的int向量。单个元素是值初始化ìnt表示零初始化。所以你得到一个带有一个条目的向量,值为0。这一个

vector <int> multiples(1, 4);

创建一个大小为1的向量,这次使用值4。如果您尝试访问multiplies[1],则超出了size-1向量的范围,从而调用未定义的行为。你想初始化一个带有两个值14元素的向量,在C ++ 11中你可以这样做:

vector <int> multiples{1, 4};

答案 1 :(得分:1)

int main() {

    vector <int> multiples(1);

    cout << multiples[0];

}

http://cplusplus.com/reference/stl/vector/vector/

使用1个int元素创建vector,默认情况下初始化(即int()== 0)。

vector <int> multiples(1, 4);

创建带有1个由4初始化的int元素的向量。

cout << multiples[1]; // 4

这是不正确的,因为向量中只有一个元素。

答案 2 :(得分:1)

看看这段代码。你应该看到问题。您没有按照预期的方式初始化向量。

int main()
{
    vector <int> multiples(2); // create a vector of size two with default value of 0.
    multiples[0] = 10; // set element at index 0 = 10
    multiples[1] = 20; // set element at index 0 = 10
    cout << multiples[0]; // 10
    cout << multiples[1]; // 20
}

答案 3 :(得分:0)

实际上,您不需要指定矢量的大小。 您可以根据需要添加元素(特定对象),这是向量的主要优势和用途。向元素添加元素可以通过以下方式轻松完成:

multiples.push_back(1);
multiples.push_back(4);

希望它有所帮助。