C++ C++;17迭代器';我没打电话
在定制的C++17迭代器改变了一些特性之后,我对它还是个新手。为了说明这个错误,下面是一个简单的代码来说明这个问题。据报,这是一个错误 auto[minu_it,max_it]=std::minmax_元素(r.begin(),r.end()) 找不到 前向迭代器标记 为什么会发生这种情况?我们怎样才能解决它?非常感谢C++ C++;17迭代器';我没打电话,c++,c++17,C++,C++17,在定制的C++17迭代器改变了一些特性之后,我对它还是个新手。为了说明这个错误,下面是一个简单的代码来说明这个问题。据报,这是一个错误 auto[minu_it,max_it]=std::minmax_元素(r.begin(),r.end()) 找不到 前向迭代器标记 为什么会发生这种情况?我们怎样才能解决它?非常感谢 #include <iostream> class num_iterator { public: explicit num_iterator(int pos
#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;
}
#包括
类num_迭代器{
公众:
显式num_迭代器(intpos=0):i{pos}{};
整型运算符*()常量{
返回i;
}
num_迭代器和运算符++(){
++一,;
归还*这个;
}
布尔运算符!=(常量数值迭代器和其他){
返回i!=其他。i;
}
私人:
int i;
};
类数范围{
公众:
num_范围(int-from,int-to):a{from},b{to};
num_迭代器begin(){
返回num_迭代器{a};
}
num_迭代器end(){
返回num_迭代器{b};
}
私人:
int a{0};
int b{0};
};
名称空间标准{
模板
结构迭代器{
使用迭代器\u caterory=std::forward\u迭代器\u标记;
使用value_type=int;
};
}
int main(){
用于(整数a:num_范围(10,20)){
std::cout在这种特定情况下,编译器会抱怨您的自定义迭代器缺少运算符==
:
bool operator==(const num_iterator& other){
return !(*this != other);
}
另一个具体问题是您拼写错误了iterator\u category
using iterator_category = std::forward_iterator_tag;
一般来说,定义自己的迭代器并不总是非常简单。根据迭代器类型的不同,有许多必需的操作。我建议使用
问题已经解决了
前向迭代器需要一些您尚未提供的其他功能,例如:
- 您缺少
指针的类型特征
,差异类型
,而引用
的类型特征必须是常量&
- 您需要前缀和后缀增量运算符
- 您需要
操作符==
和操作符!=
(如上所述)
- 您还缺少
操作员->
我遗漏了什么吗?即使我添加了它,它似乎也不起作用。我复制粘贴了演示,下面是错误消息…/XcodeDefault.xctoolchain/usr/bin/。/include/c++/v1/算法:2632:19:注意:在函数模板专门化的实例化中,这里请求的“std::\uu 1::minmax\u元素”返回\u VSTD::minmax\u元素(uuu first,uuuu last,^/Temp/cppplayder/main.cpp:54:31:注意:在函数模板专门化的实例化中,此处请求自动[minu-it,max-it]=std::minmax-u元素(r.begin(),r.end());