通过向量错误解除引用

时间:2014-11-09 06:49:28

标签: c++ vector pass-by-reference dereference

对于我的构造函数,我输入一个整数向量,在构造函数中,我设置另一个bool类型的向量,名为theSet。从输入向量中,我检查每个元素以查看它是否在0和20之间,如果为true则则该元素为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]);
    }
}

1 个答案:

答案 0 :(得分:1)

使用theSet.resize()代替theSet.reserve(),它可能会起作用。请试试。使用reserve(),您只是为插入预先分配内存,但内存本身是单元化的,分别是。还没有真正的元素。当您尝试修改循环中的值时,您将请求对位置i处的值的引用,但是没有可以修改的元素,因此错误。