从搜索算法返回的约定 - 索引或迭代器



我应该从字符串搜索算法返回迭代器还是索引?

特别是,我想遵守C++的惯例。模板化函数(如 std::find)返回迭代器,因为它必须返回,因为某些容器不可索引。更专业的函数(如 std::string::find)返回size_t索引。

对于std::find,故障

检查== x.end(),专用版本的检查== std::string::npos(通常为 -1)。我认为迭代器检查方法更优雅。

在内部,无论返回类型如何,出于性能和便利原因,我都将使用索引。

当我修复输入类型(std::string)时,每种返回方式的优点和缺点是什么?

如果你想符合STL(尽管即使是STL也不是完美的设计,而且std::string是索引和迭代器混合在一起的规范示例),你应该使用迭代器。然后,可以使用std::distance来查找typename iterator_traits<InputIterator>::difference_type方面的位置(即大多数时候std::size_t)。当然,对于非随机访问迭代器来说,这将产生O(n)开销,但它是最合规的方法。

希望将来的范围能够进入标准库http://www.boost.org/doc/libs/1_57_0/libs/range/doc/html/index.html

std::string搜索成员函数的约定是返回类型 size_t 的索引,因为其他成员函数(如 substrinserterase采用索引。其中一些也提供迭代器重载,但并非所有迭代器重载都提供。

如果计划将函数的输出与采用索引的函数一起使用std::string请返回索引。如果计划将函数的输出与接受迭代器的函数一起使用,请返回迭代器。

最新更新