![](/img/trans.png)
[英]Why does `std::set::erase(const key_type&)` return `size_type` instead of `bool`?
[英]Why does string::find return size_type and not an iterator?
在C ++中,为什么string::find
返回size_type
而不是iterator
?
这是有意义的,因为像string::replace
或string::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.