首页 > 解决方案 > 返回 bool 作为 cpp 中 bool operator[] 中的值

问题描述

所以基本上我有一个包含布尔值(true,false)的std :: vector容器,我需要一个operator [],但是当我返回具有正确索引的值(bool)时,它给了我一个错误this: 无法将“bool&”类型的非 const 左值引用绑定到“bool”类型的右值|

我的操作员看起来像这样:

bool& operator[] ( unsigned int idx) {
    typename std::vector<bool>::iterator retval;
    for (typename std::vector<std::vector<bool> *>::iterator it = data.begin(); it != data.end(); ++it) {
        for (typename std::vector<bool>::iterator cont_it = (*it)->begin(); cont_it != (*it)->end(); ++cont_it) {
            if (idx == 0) {
                retval = cont_it;
            }
            idx--;
        }
    }
    return *retval;
}

以及给出错误的调用:

ivb[0] = false;
ivb[1] = true;

标签: c++booleanreturn-value

解决方案


@Jarod42 的回答稍有改善:

std::vector<bool>::reference operator[](unsigned int idx) {
    for (auto &inner : data) {
        if (idx < inner.size()) {
            return inner[idx];
        }
        idx -= inner.size();
    }
    throw std::runtime_error("out of range");
}

并假设所有内部向量的大小相同:

std::vector<bool>::reference operator[](unsigned int idx) {
    // vectors_sizes = data[0].size()
    if (idx >= vectors_sizes * data.size())
        throw std::runtime_error("out of range");
    return data[idx / vectors_sizes][idx % vectors_sizes];
}

推荐阅读