我在徘徊,用户定义的容器可与 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++ 编码方式?
最佳答案
据我所知,范围本身只需要有返回有效迭代器的 begin
和 end
成员。迭代器可能更难正确使用。据我所知,最弱的迭代器(即需要最少成员的迭代器)需要以下成员:
- 默认构造函数
- 拷贝构造函数
运算符=
operator++
(前置和后置形式)运算符*
运算符==
运算符 !=
- 从
std::iterator
的适当实例化中公开继承,因此它具有可用的正确类型成员——尽管这在 C++17 中已被弃用,因此您可能更愿意添加类型用手代替。
您可以对概念进行静态断言,这应该可以帮助您确定所需的内容:
static_assert(ranges::Iterator<my_iterator>(), "Not Iterator");
关于c++ - 要求用户制造的容器符合 range-v3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530677/