3月21 日,标准委员会投票赞成批准P0174中std::iterator提议的弃用:
对于读者而言,很长的void参数序列不仅仅是简单地
typedef在类定义本身中提供预期的s,这是当前工作草案采用的方法,遵循c ++中设置的模式14
在c ++ 17之前std::iterator,鼓励继承从迭代器样板实现中删除乏味.但弃用将需要以下其中一项:
typedefsauto而不是依赖于迭代器来声明类型std::iterator_traits,可以更新,而继承工作std::iterator有人可以告诉我我应该期待哪些选项,因为我设计了自定义迭代器,着眼于c ++ 17兼容性?
我对一些关于定义我自己的迭代器的概念感到困惑:
从这里:http://www.cs.northwestern.edu/~riesbeck/programming/c++/stl-iterator-define.html,这似乎建议使用定义运算符的内部迭代器类.许多其他人继承基类iterator来重新定义运算符.
我对应该使用哪种方法感到很困惑.为什么会这样
typedef ptrdiff_t difference_type;
Run Code Online (Sandbox Code Playgroud)
例如,在容器类的定义的开头?
非常感谢你!
我听说std::iterator在 C++17 中不推荐使用。
例如,像功能<algorithm>,更可能我们要使用begin()和end()它返回迭代器对象,如成员函数std::string,std::vector等等。
或者像基于范围的 for 循环,我们需要的地方begin()以及end()返回迭代器的地方。
因此,如果std::iterator基类被弃用,我们是否应该使用成员函数,如begin()和end()或使用 STL 中需要迭代器的其他函数?
C++ 标准库定义了iterator和iterator_traits模板。看来一般来说,iterator_traits只是提取 中明确定义的属性iterator。如果iterator_traits要使用a则iterator直接使用对应的即可。T*如果需要某种类型的专门化(例如),则 的专门化iterator可以满足要求。这种间接的好处是什么?