【发布时间】:2015-01-13 05:10:55
【问题描述】:
我应该从字符串搜索算法返回迭代器还是索引?
我特别想遵守 C++ 的约定。 std::find 之类的模板函数返回一个迭代器,因为它必须这样做,因为某些容器不可索引。更专业的函数,例如 std::string::find 返回一个 size_t 索引。
检查失败是== x.end() 用于std::find 和== std::string::npos(通常为-1)用于专用版本。我认为迭代器检查方法更优雅。
在内部,出于性能和方便的原因,无论返回类型如何,我都会使用索引。
当我修复输入类型(std::string)时,每种返回方式的优缺点是什么?
【问题讨论】:
-
如果您愿意,可以返回
std::pair<index,iterator>... -
@vsoftco 听起来非常不合常规(无意冒犯)
-
@self,我同意,但是 STL 并不是完美内聚库的最佳示例。希望范围将使其成为标准。而
std::string就是一个完美的例子,迭代器和索引混合在接口中。如果我要编写函数,我会使用迭代器模式,因为大多数库都是基于迭代器的。而且,如果您想找到实际位置,可以使用std::distance和迭代器。 -
@vsoftco 关于
std::string的精彩观点@ stl 中的大多数算法都采用迭代器,<container>.begin(), <container>.end()。我发现这种模式是一致的。 -
@self 对,刚刚完成我的评论 :)
标签: c++ string string-matching calling-convention