什么时候写迭代器?

Jon*_*Jon 22 c++ iterator stl

我知道这可能是一个愚蠢的问题..我什么时候需要编写自己的迭代器?是在设计我自己的容器类时吗?还有其他什么时候我想创建自己的迭代器吗?

例子将被挪用.

-Jon

Jer*_*fin 7

是的,还有其他时间.举几个例子:

  1. filter_iterator,仅返回容器中项目的已过滤子集.
  2. 一个只返回对象部分的select迭代器.
  3. 一个ostream_iterator,它在项目之前或之间放置分隔符,而不是在它们之后.


jal*_*alf 5

任何时候您需要迭代一系列数据,并且尚未定义符合您需求的迭代器.

通常,您使用迭代器来遍历容器,但这远远不是唯一的用途.

迭代器也可以遍历数据库查询的结果,或从流输入读取(std::istream_iteratorstd::istreambuf_iterator已经做到这一点,不过),或者你需要一个特殊的遍历顺序或战略.也许你想迭代"这个向量的每个成员,其索引可以被4整除",或者"这个字符串中的每个大写字母",或者你能想到的任何其他东西.

  • +1:其他一些逃避其他答案的例子:`boost :: filesystem :: directory_iterator`不会迭代容器,而是迭代目录.`pqxx :: result :: iterator`迭代查询到DB的结果,`boost :: asio :: tcp :: resolver :: iterator`迭代tcp端点...它们都不是一个容器,但是他们使用迭代器成语. (2认同)

Kir*_*sky 2

您需要为自己的容器类编写自己的迭代器,或者如果您在迭代标准容器时需要非标准行为。