从私有向量公开访问和赋值运算符

时间:2017-06-08 03:51:27

标签: c++ vector boost

我正在使用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(); }

};

1 个答案:

答案 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[]超载符合您的要求,那么我建议您只需要这样做。