为什么这个代码在向量上给运行时错误?

时间:2014-03-06 12:39:10

标签: c++ vector

此代码有什么问题,为什么会出现运行时错误?

    #include <iostream>
    #include <vector>
    using namespace std;

    int main() {

        vector < int > a[2];
        a[0][0]=1;
        a[1][0]=2;
        cout << a[0][0];
        cout << a[1][0];
        return 0;
    }

另外请更正。

4 个答案:

答案 0 :(得分:4)

  

为什么会给出运行时错误?

由于这两个向量是空的,因此您无法使用[]访问其元素。

  

另外请更正。

    vector < int > a[2];
    a[0].push_back(1);
    a[1].push_back(2);

答案 1 :(得分:3)

因为a是两个空向量的数组。您正在尝试访问不存在的元素。

答案 2 :(得分:0)

  

为什么会给出运行时错误?

vector < int > a[2];

此声明后,矢量为空。所以这是尝试访问其元素的未定义行为。这是运行时错误的原因。您需要先初始化它们:

vector < int > a[2];
a[0].push_back(1);
a[1].push_back(2);

声明

std::vector<int>(10);

指定此向量的大小为10。 如果要在容器中指定vector的大小,可以执行此操作:

std::vector<int> va[2];
va[0] = std::vector<int>(10);

然而,这可能会更好:

va[0].reserve(100);  // but this just pre-allocates memory, doesn't initialize

答案 3 :(得分:0)

operator[]不提供边界检查。如果你使用at代替,你会得到一个很好的例外,告诉你问题是什么。如果容器大小<​​b>不大于n,则提供索引n是未定义的行为。

a[0].at(0) =1;
a[1].at(0) =2;
terminate called after throwing an instance of 'std::out_of_range'

  what():  vector::_M_range_check