我是一名C ++新手,在OS X Yosemite上学习C ++。
我在这样的源文件中声明了一个向量。
vector <int> v(3);
代码:
#include <iostream>
#include <vector>
using namespace std;
void printVector (vector <int> v) {
for (int i = 0; i < v.size() ; i++)
cout << v[i] << endl;
}
int main (int argc, char ** argv) {
vector<int> v(3);
cout << "Initialise vectors..." << endl;
v[0] = 10;
v[1] = 11;
v[2] = 12;
printVector(v);
v.push_back(7);
cout << "push back (7)" << endl;
printVector(v);
return 0;
}
计划有效。
然后我引用了这个网页here并按照它的方式声明了这样的矢量。
vector <int> v;
编译(使用g ++)很好,但在执行时编写段错误11。
网站错了吗?
答案 0 :(得分:4)
你可以访问这样的元素:
v[0] = 10;
v[1] = 11;
v[2] = 12;
这要求vector
至少包含三个元素。如果你这样声明:
vector<int> v(3);
然后它有三个元素,很棒。如果你这样声明:
vector<int> v;
然后它没有元素,因此上述访问无效。如果您想创建一个空的vector
,然后向其中添加元素,请使用push_back
:
v.push_back(10);
v.push_back(11);
v.push_back(12);
答案 1 :(得分:2)
当您声明vector<int> a
时,它的大小为0,因此访问向量的元素会产生错误。在这种情况下,您必须使用push_back
添加元素:
v.push_back(10); // instead of v[0] = 10;
答案 2 :(得分:1)
您也可以使用vector::at
代替[]运算符来进行容器的边界检查。如果你越过它,它会抛出out_range_exception
。