- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在更改了一些功能之后,我对自定义的 C++17 迭代器很陌生。为了说明错误,以下是说明问题的极简代码。报错了
auto[min_it, max_it] = std::minmax_element(r.begin(), r.end());
forward_iterator_tag
#include <iostream>
class num_iterator {
public:
explicit num_iterator(int pos = 0) : i{pos} {};
int operator*() const {
return i;
}
num_iterator &operator++() {
++i;
return *this;
}
bool operator!=(const num_iterator &other) {
return i != other.i;
}
private:
int i;
};
class num_range {
public:
num_range(int from, int to) : a{from}, b{to} {};
num_iterator begin() {
return num_iterator{a};
}
num_iterator end() {
return num_iterator{b};
}
private:
int a{0};
int b{0};
};
namespace std {
template<>
struct iterator_traits<num_iterator> {
using iterator_cateory = std::forward_iterator_tag;
using value_type = int;
};
}
int main() {
for (int a:num_range(10, 20)) {
std::cout << a << " ";
}
num_range r{100, 110};
auto[min_it, max_it] = std::minmax_element(r.begin(), r.end());
std::cout << *min_it << std::endl;
std::cout << *max_it << std::endl;
return 0;
}
最佳答案
在这种特定情况下,编译器提示缺少 operator==
。对于您的自定义迭代器:
bool operator==(const num_iterator& other){
return !(*this != other);
}
另一个具体问题是您拼错了
iterator_category
using iterator_category = std::forward_iterator_tag;
一般来说,定义自己的迭代器并不总是那么简单。有许多必需的操作因您的迭代器类型而异。我建议使用
Boost.Iterator做对了。
pointer
的类型特征, difference_type
,以及 reference
的类型特征必须是 const T&
operator==
和 operator!=
(如上所述)operator->
关于C++17 iterator_traits 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59699632/
我正在尝试编制一份学校作业,但出现错误,而且由于这个时间 uni 没有合格的老师,我来这里寻求帮助。 我收到一条错误消息:“Error C2893 Failed to specialize funct
我想专攻std::iterator_traits<>对于 不 具有通常的嵌套 typedef(如 value_type、difference_type 等)的容器类模板的迭代器,我不应该修改其源代码。
我想加强基于范围的 for 循环,例如通过启用反向迭代。我设法通过编写适配器使其在某种程度上工作,但我不知道如何使适配器可组合。 #include template struct reversed
我是 C++ 新手,所以请多多包涵。我想了解 STL iterator_traits .在“C++ 标准库”一书中,结构 iterator_traits定义如下: template struct i
在更改了一些功能之后,我对自定义的 C++17 迭代器很陌生。为了说明错误,以下是说明问题的极简代码。报错了 auto[min_it, max_it] = std::minmax_element(r.
阅读 excerpt 时来自 cppreference If Iterator does not have the five member types difference_type, value_t
例如,引用 cplusplus.com 中的这个片段: template typename iterator_traits::difference_type count(InputIterator
我有一个模板函数,需要专用于迭代器。所以我所做的是: template void function2(T whatever, typename std::iterator_traits::point
有一个代码给出了一个错误,我完全不清楚。我想要的是通过 iterator_traits 传递一个指向结构/类成员的指针. template S mean(Iter begin, const Iter&
我想弄清楚对 forward_iterators 的 reference 有什么要求类型。在明显的情况下,您将拥有 value_type = T;和 reference = T&; .阅读 cppre
我正在这样做: const int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; const auto foo = cbegin(arr
为什么我不能编译下一段代码? #include struct test_iterator { using value_type = int; }; int main() { std:
我在故意为不特别遵守迭代器的函数抛出异常(出于测试目的)时遇到了麻烦。要了解我在做什么,请带上我的 decorator_iterator结构: struct decorated_iterator
这是我的 linked_list 模板的片段: #include #include template struct linked_list { struct iterator_base
给定: struct Iter { using value_type = int; using difference_type = int; using reference =
我有一些代码可以在 MSVC 下正常编译(或者说发送给我的 Windows 开发人员),但在 CLang 下会出错。环顾四周,我发现 CLang 在解析模板特化方面确实更加严格,但我不确定在我的案例中
我有以下函数和 vector : template RandomIterator upperBound(RandomIterator start, RandomIterator end, cons
C++ 新手。我想创建一个动态对象数组并使用 std::sort() 对它们进行排序。但是,出现了几个错误,我无法弄清楚原因。谢谢你的帮助。错误如下所示: > community\vc\tools\m
我最近了解到ForwardIterator需要operator *通过引用返回,这意味着迭代器返回代理,例如 std::vector , 不能是ForwardIterator([forward.ite
myVector 是 vector 节点。每个 Node 都有一个 int 值和一个字符串指针名称。我正在尝试创建一个简单的函数来确定此 vector 中的任何节点是否具有此名称。 vector::i
我是一名优秀的程序员,十分优秀!