【问题标题】:Iterator for a custom unbound array自定义未绑定数组的迭代器
【发布时间】:2018-02-03 12:02:19
【问题描述】:

我实现了自己的小UnboundArray 类:

template <typename T>
class UnboundArray {
private:
    std::vector<T> elementData;
public:
    ...
    std::size_t size()
    {
        return elementData.size();
    }
};

我有一个类,我想在其中使用我的 UnboundArray,尤其是我需要在 UnboundArray 元素上使用 for 循环:

for (auto const &row : unbound_arrays) {
// loop over unbound array of unbound arrays and call its size method or something else
}

我真的是 C++ 迭代器的新手,不知道我应该遵循什么路径。我应该从头开始实现我的迭代器,还是应该在我的UnboundArray 中创建一个std::iterator 类型的成员?

【问题讨论】:

  • 请注意,std::iterator 已被弃用,并将在未来某个时候被删除。我建议你检查例如this iterator category reference 看看哪种迭代器最适合您的需求,以及它需要哪些成员函数和运算符。

标签: c++ stl iterator std


【解决方案1】:

如果您主要需要将range based for loop 与您的自定义类UnboundArray 一起使用,您可以从为UnboundArray 实现begin()end() 方法开始:

auto begin() { return std::begin(elementData); }
auto end() { return std::end(elementData); }

所以循环工作:

UnboundArray<int> unbound_array;

for (auto const &elem: unbound_array) { // ... }

wandbox example


请务必注意,您需要 const 重载才能遍历 const UnboundArray

auto begin() const { return std::cbegin(elementData); }
auto end() const { return std::cend(elementData); }

【讨论】:

  • 谢谢您,先生!我会检查一下。
  • @Jacobian 不要忘记添加 const 重载,以免您感到惊讶。
  • @DeiDei。您能否以一个小答案的形式详细说明这一点?谢谢!
  • 非常感谢!
  • 对不起一个愚蠢的问题,但我应该如何循环通过像这样实例化的unbound_arrayauto unbound_array = new UnboundArray&lt;int&gt;{};
猜你喜欢
  • 1970-01-01
  • 2013-02-17
  • 2018-08-25
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多