[英]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.