簡體   English   中英

向量訪問中的程序段錯誤

[英]Program seg faults on vector access

我是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;

}

程序有效。

然后,我在此引用了此網頁並按照其方式聲明了矢量。

vector <int> v;

編譯良好(使用g ++),但執行時程序段錯誤11。

網站錯了嗎?

好了,您可以訪問以下元素:

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);

聲明vector<int> a ,其大小為0,因此訪問該向量的元素將產生錯誤。 在這種情況下,必須使用push_back添加元素:

v.push_back(10); // instead of v[0] = 10;

您也可以使用vector::at代替[]運算符,以使容器執行邊界檢查。 如果您越過它們,它將拋出out_range_exception

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM