c++ - 要求用户制造的容器符合 range-v3

标签 c++ range-v3

我在徘徊,用户定义的容器可与 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++ 编码方式?

最佳答案

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

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

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

static_assert(ranges::Iterator<my_iterator>(), "Not Iterator");

关于c++ - 要求用户制造的容器符合 range-v3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530677/

相关文章:

c++ - 使用 C++ 字符串函数自动替换 s​​printf 函数

c++ - 编译 range-v3 const 方法时出现编译错误

c++ - 将范围拆分为重叠范围的范围

c++ - 未解析的外部符号错误,即使函数存在 char*

c++ - 无法链接 GLFW3 : undefined references

c++ - STL/ranges 算法计算加权平均值

c++ - 使用 range-v3 读取逗号分隔的数字列表

c++ - Singleton 类中的静态私有(private)数据成员

c++ - 使用相同的 boost :thread variable to create multiple threads