为什么string :: find返回size_type而不是迭代器?

Fra*_*ank 24 c++ iterator stl find

在C++中,为什么string::find返回size_type而不是iterator

它会有意义,因为函数喜欢string::replacestring::insert将迭代器作为输入,所以你可以使用find一些字符并立即将返回的迭代器传递给replace等等.

另外,std::find返回一个迭代器 - 为什么std::string::find不同?

sbi*_*sbi 26

当Stroustrup将标准委员会引入STL时,标准库的闪亮新字符串类的设计已经完成.委员会喜欢STL,并开始将其纳入标准,从而适应他们已经达成一致的大部分内容(并且可能还将标准推迟一年或两年).

在其他更改中,迭代器被添加到已经完成的字符串类中作为后想.您可以通过查看获取/返回位置的各种字符串成员来看到这一点 - 它是索引和迭代器的混合体.

并不总是很容易猜到为什么一些成员函数只有索引 - 采用版本而一些成员函数也有迭代器.std::basic_string<>::find()但是,在这种情况下,它似乎很简单:既然std::find()已经返回一个迭代器,std::basic_string<>::find()那么它就像它一样.

  • @dehmann:从历史POV看它:它们只在STL的算法不能做的情况下添加了处理迭代器的成员函数.由于`std :: find()`适用于字符串,因此不需要另一个find函数将迭代器作为字符串类的成员返回.所以`std :: basic_string <> :: find()`保持不变. (2认同)

sho*_*osh 7

从查找中获取数字可能更有用,因为这样您就可以使用[]运算符或substr()获取刚搜索过的字符.

此外,如果你想要一个迭代器,你总是可以做到 begin() + pos

  • 所以你说'string :: find`的错误接口实际上是好的,因为它与`string :: substr`的​​错误接口交互得很好?;) (3认同)