2014-07-24 89 views
-5

繼承人我的代碼的問題是,當我通過函數試圖在全球向量寫前衛拋出異常寫作全球矢量<int>

//global elements 
vector <int> par; 
int t = 0; 

void fun(int V) 
{ 
    for(int i = 0; i < V ; ++i) 
    par.at(i) = i ; 
} 

int main() 
{ 
    int V; 
    cin >> V; 

    par.reserve(V); 

    for(int i = 0 ; i < V ; ++i) 
     par[i] = i; 

    //following code fails to print anything?? 
    for(auto it : disc)  cout<<it<<' '<<"hello"; 

    //this throws exception 

    fun(V); 
} 
+3

你的載入是空的。你至少需要填寫V元素。這與矢量是全球性無關。 – juanchopanza

+1

什麼是「光盤」? –

+0

其實我寫了光盤代替par的地方,對不起我的壞.. – user3872868

回答

2

的問題是,雖然std::vector::reserve儲量內存進行擴展,其實際上並沒有增加矢量的大小。這意味着當你做了par[i] = i您正在索引超出向量的範圍,這會導致undefined behavior

您仍然必須使用push_back添加元素。


還有另一種解決方案,以及,並分配給全體向量的正確尺寸的另一種載體,並且可以設置在constructor大小:

std::cin >> v; 
par = std::vector<int>(v); 

上面創建一個臨時矢量包含v條目,並且在臨時向量被破壞之前將該向量複製到par

+0

是的,我明白..謝謝你的幫助.. – user3872868