由于C++ 17弃用std::iterator
,我需要实现我自己的。原来它只是一个带有一些typedefs的空结构。实现std :: iterator
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> {}
这工作:
printf("%d\n", std::is_same<typename dummy_iter::pointer, int*>::value);
但是,它不与std::iterator_traits
工作:
printf("%d\n", std::is_same<typename std::iterator_traits<dummy_iter>::pointer, int*>::value);
error: 'pointer' in 'struct std::iterator_traits<dummy_iter>' does not name a type
您不必实现自己的。 'std :: iterator'仍然在标准中,并且每个标准库实现都需要提供它。弃用是一种警告,表示将来可能会删除**。这并不会将其删除,但这并不意味着它会被删除。自1998年以来,C头文件已被弃用,并且它们仍然活着,踢腿并被广泛使用。 –