此代码有什么问题,为什么会出现运行时错误?
#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;
}
另外请更正。
答案 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