2

我在徘徊,用户定义的容器与 Range-v3(算法......)一起使用的新要求是什么?

例如,我们需要在标准意义上改变我们的设计(成员类型,成员函数......)?如何遵守 Range-v3 算法的概念?我们需要提供哪些成员函数?迭代器有哪些变化?

迭代器/开始/结束的替代品是什么?

template<typname T>
struct container
{
    //...
    using value_type = T;
    //...
    using iterator = value_type*;
    using const_iterator = const value_type*;
    //...
    iterator begin() { //... }
    //...
};

如果有人可以提供规范的容器实现,那就太好了。

Range-v3 带来了哪些新的想法/观念?什么是新的 C++ 编码方式?

4

1 回答 1

1

据我所知,范围本身只需要具有返回有效迭代器的成员beginend迭代器可能有点难以正确。据我所知,最弱的迭代器(即需要最少成员的迭代器)需要以下成员:

  1. 默认构造函数
  2. 复制构造函数
  3. operator =
  4. operator ++(在前和后的形式)
  5. operator *
  6. operator ==
  7. operator !=
  8. 从适当的实例化中公开继承,std::iterator因此它具有可用的正确类型成员——尽管这在 C++17 中已被弃用,因此您可能更喜欢手动添加类型。

您可以静态断言这些概念,这应该可以帮助您确定所需的内容:

static_assert(ranges::Iterator<my_iterator>(), "Not Iterator");
于 2017-04-07T08:07:08.117 回答