2014-11-09 50 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