我正在使用C ++中的代码,其中我创建的类将boost / dynamic_bitset的向量存储为私有字段。我需要能够访问和修改向量中的任何位置来进行位集操作(&,|,^,...)。
可以公开向量分配( = )和访问( [] )运算符而无需重新实现它们吗?就像我使用迭代器一样。
以下是标题:
class graph{
typedef vector<boost::dynamic_bitset<>> tgraph;
node person;
tgraph gg;
public:
graph();
graph(const uint person, const uint max_days, const uint max_nodes);
void add_encounter_index(const node);
void add_encounter_index(const node, const node, const node);
void dump(ofstream& f, const vector<encounter>&);
// iterators
using iterator = tgraph::iterator;
// using pointer = tgraph::value_type;
using reference = tgraph::reference;
// using value_type = tgraph::value_type;
using const_iterator = tgraph::const_iterator;
using const_reference = tgraph::const_reference;
iterator begin() { return gg.begin(); }
iterator end() { return gg.end(); }
const_iterator begin() const { return gg.begin(); }
const_iterator end() const { return gg.end(); }
const_iterator cbegin() const { return gg.cbegin(); }
const_iterator cend() const { return gg.cend(); }
};
答案 0 :(得分:1)
您可以为operator[]
重载graph
,以便它解析为对vector元素的引用,例如:
// Inline member function
auto& operator[](size_t index)
{
return gg[i];
}
(在旧版C ++中,您需要指定dynamic_bitset
类型而不是auto
)。这使您可以使用:
graph1[i] = dynamic_bitset<>(size);
和其他此类陈述。您可以重载operator=
,但这适用于使用graph1 =
,并且重载此运算符以执行与其默认行为不同的操作会让您感到困惑。因此,如果只有operator[]
超载符合您的要求,那么我建议您只需要这样做。