繁体   English   中英

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

[英]Why does string::find return size_type and not an iterator?

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM