2014-11-09 55 views
-1

對於我的構造函數,我輸入一個整數向量,並在構造函數中設置另一個類型爲bool的向量,稱爲theSet。從輸入向量中,我檢查每個元素是否在0到20之間,如果爲true,那麼Set的元素爲true。通過向量錯誤解引用

但是,我在解除引用set矢量的實現時遇到了問題。

class Set 
{ 
public: 
    Set(vector<int> &); 
    bool IsMember(int); 

private: 
    vector<bool> theSet; 

} 

bool Set::IsMember(int x) 
{ 
    if ((x >= 0) && (x <= 20)) 
     return true; 
    else 
     return false; 
} 


Set::Set(vector<int> &v) 
{ 
    int length = v.size(); 
    theSet.reserve(length); 

    bool check; 

    int p = 0; 
    for (int i = 0; i < length; i++) 
    { 
     theSet[i] = IsMember(v[i]); 
    } 
} 
+0

你有什麼問題? – Radiodef 2014-11-09 06:55:53

+1

@Radiodef我剛剛複製/粘貼他的代碼,並且msvcr出現了一個調試斷言錯誤,聲稱當'setSet [i] = IsMember(v [i])'時,迭代器不會無效['''。 – PuerNoctis 2014-11-09 06:57:56

+0

@PuerNoctis請注意,OP應該*告訴我們這個問題。因爲我認爲他們已經*已經試圖編譯它。 – Radiodef 2014-11-09 06:59:53

回答

1

使用theSet.resize()而不是theSet.reserve()它可能會工作。請嘗試。與reserve()你只是預先分配內存插入,但內存本身是單位化,分別。還沒有真正的元素。當您嘗試修改循環中的值時,您會請求參考位置i處的值,但沒有可以修改的元素,因此是錯誤。

+0

我得到向量下標超出範圍 – 2014-11-09 07:05:22

+0

@monkeydoodle即使使用'resize()'?奇怪... – PuerNoctis 2014-11-09 07:06:57

+0

我道歉,它的作品。謝謝! – 2014-11-09 07:07:52