在C ++中,为什么string::find
会返回size_type
而不是iterator
?
这是有意义的,因为像string::replace
或string::insert
这样的函数将迭代器作为输入,所以你可以find
某个字符并立即将返回的迭代器传递给replace
等
此外,std::find
返回迭代器 - 为什么std::string::find
不同?
答案 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
。