在矢量访问上编程seg错误

时间:2015-07-17 14:17:15

标签: c++ vector

我是一名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。

网站错了吗?

3 个答案:

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