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

时间:2010-06-17 13:22:22

标签: c++ stl iterator find

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

这是有意义的,因为像string::replacestring::insert这样的函数将迭代器作为输入,所以你可以find某个字符并立即将返回的迭代器传递给replace

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

4 个答案:

答案 0 :(得分:26)

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

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

并不总是很容易猜到为什么有些成员函数只有索引版本,有些函数也有迭代器函数。但是,在std::basic_string<>::find()的情况下,似乎很容易:由于std::find()已经返回迭代器,因此std::basic_string<>::find()保持不变。

答案 1 :(得分:7)

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

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

答案 2 :(得分:3)

所有字符串函数都在索引上运行,一些函数(如replace()insert())只是另外支持迭代器。因此,find() 的结果可以直接用于这些函数。由于不能有两个find()函数只是因返回类型而不同(一个返回一个迭代器,一个返回一个索引),因此必须选择一个。{/ p>

答案 3 :(得分:0)

我认为这是因为通常字符串成员使用索引而不是迭代器,这样可以很容易地使用返回的值。如果要获取迭代器,可以始终使用std::find