在vector <int>和vector <bool>差异</bool> </int>上重载下标运算符

时间:2014-09-22 14:39:50

标签: c++ vector boolean operator-overloading

我正在尝试在向量上实现bitset运算符&lt;布尔&GT;包装类。

我的问题是,当向量是int时,下标operator []的工作原理,但不是当它是bool时。

struct bitsetI {
    vector<int> data;
    bitset(int length) { data = vector<int>(length);}
    int &operator[](const int index) { return data[index]; }
}

struct bitsetB {
    vector<bool> data;
    bitset(int length) { data = vector<bool>(length);}
    bool &operator[](const int index) { return data[index]; }
}

使用bitsetI

bitsetI I(4);
I[0] = 1;

有效,但

bitsetB B(4);
B[0] = true;

将无法编译,给出“非const的引用的初始值必须是左值”错误。

我知道vector是vector的一个笨拙的特化(实现这个因为我需要能够在运行时声明bitstring长度,而不是像std :: bitset那样编译,而速度不是问题),但是不能找出问题在这里,如果有解决方法或者我应该只使用set函数。

0 个答案:

没有答案