Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实现std::迭代器_C++_Templates_C++17 - Fatal编程技术网

C++ 实现std::迭代器

C++ 实现std::迭代器,c++,templates,c++17,C++,Templates,C++17,因为C++17不赞成std::iterator,所以我需要实现我自己的。原来它只是一个带有一些typedef的空结构 template <class Category, class Type, class Diff = ptrdiff_t, class Pointer = Type*, class Reference = Type&> struct iterator { typedef Category iterator_catergory; typedef

因为C++17不赞成std::iterator,所以我需要实现我自己的。原来它只是一个带有一些typedef的空结构

template <class Category, class Type, class Diff = ptrdiff_t,
    class Pointer = Type*, class Reference = Type&>
struct iterator {
  typedef Category iterator_catergory;
  typedef Type value_type;
  typedef Diff difference_type;
  typedef Pointer pointer;
  typedef Reference reference;
};

struct dummy_iter : iterator<std::output_iterator_tag, int> {}

你打错了。本声明:

typedef Category iterator_catergory;
应该是这样的:

typedef Category iterator_category;
该标准规定,除非
iterator\u traits
包含所有必需的typedef,否则它将成为一个空类。请参见[iterator.traits]/2:

如果迭代器具有有效的([temp.Decrete])成员类型差分类型, 值类型、指针、引用和迭代器类别, 迭代器特性应具有以下特性: 无障碍成员:

  using difference_type   = typename Iterator::difference_type;
  using value_type        = typename Iterator::value_type;
  using pointer           = typename Iterator::pointer;
  using reference         = typename Iterator::reference;
  using iterator_category = typename Iterator::iterator_category;
否则,迭代器不得由任何 上面的名字


你打错了。本声明:

typedef Category iterator_catergory;
应该是这样的:

typedef Category iterator_category;
该标准规定,除非
iterator\u traits
包含所有必需的typedef,否则它将成为一个空类。请参见[iterator.traits]/2:

如果迭代器具有有效的([temp.Decrete])成员类型差分类型, 值类型、指针、引用和迭代器类别, 迭代器特性应具有以下特性: 无障碍成员:

  using difference_type   = typename Iterator::difference_type;
  using value_type        = typename Iterator::value_type;
  using pointer           = typename Iterator::pointer;
  using reference         = typename Iterator::reference;
  using iterator_category = typename Iterator::iterator_category;
否则,迭代器不得由任何 上面的名字


干得好。你比我快了不到一分钟。:-)干得好。你比我快了不到一分钟。:-)你不必实现你自己的
std::iterator
仍然在标准中,每个标准库实现都需要提供它。弃用是一种警告,表示将来可能会删除某些内容。这并不意味着它会被移除,也不意味着它会被移除。C头文件自1998年以来就被弃用了,它们仍然活跃、活跃并被广泛使用。您不必实现自己的头文件
std::iterator
仍然在标准中,每个标准库实现都需要提供它。弃用是一种警告,表示将来可能会删除某些内容。这并不意味着它会被移除,也不意味着它会被移除。自1998年以来,C头文件一直被弃用,它们仍然活跃、活跃,并被广泛使用。