gpt4 book ai didi

c++ - 从私有(private) vector 公开访问和赋值运算符

转载 作者:行者123 更新时间:2023-11-28 05:07:08 24 4
gpt4 key购买 nike

我正在使用 C++ 编写代码,其中我创建的类将 boost/dynamic_bitset 的 vector 存储为私有(private)字段。我需要能够访问和修改 vector 中的任何位置以执行位集操作(&、|、^、...)。

是否可以公开 vector 赋值 (=) 和访问 ([]) 运算符而无需重新实现它们?就像我对迭代器所做的那样。

这是标题:

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(); }

};

最佳答案

您可以为 graph 重载 operator[],以便它解析为对 vector 元素的引用,例如:

// Inline member function
auto& operator[](size_t index)
{
return gg[i];
}

(在旧版本的 C++ 中,您需要指定 dynamic_bitset 类型而不是 auto)。这使您能够使用:

graph1[i] = dynamic_bitset<>(size);

和其他此类声明。您可以重载 operator=,但这适用于 graph1 = 的用法,重载此运算符以执行与其默认行为不同的操作可能会让人感到困惑。因此,如果只有 operator[] 重载符合您的要求,那么我建议只做那个。

关于c++ - 从私有(private) vector 公开访问和赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44426305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com