push_back new example cplusplus c++ stl iterator find

c++ - new - vector c ``



¿Por qué string:: find devuelve size_type y no un iterador? (4)

El diseño de la nueva y brillante clase de cadena de la biblioteca estándar ya estaba hecho cuando Stroustrup presentó el comité estándar a la STL. Al comité le gustó el STL y comenzó a incorporarlo en el estándar, por lo que adaptó gran parte de lo que ya habían acordado (y probablemente también retrasó el estándar por uno o dos años más).

Entre otros cambios, los iteradores se agregaron a la clase de cadena ya terminada como una idea posterior. Puede ver esto observando los diversos miembros de la cadena que toman / devuelven una posición; es una combinación salvaje de índices e iteradores.

No siempre es fácil adivinar por qué algunas funciones miembro solo tienen versiones que toman índices y algunas tienen iteradores también. En el caso de std::basic_string<>::find() , sin embargo, parece fácil: dado que std::find() ya devuelve un iterador, std::basic_string<>::find() se dejó como estaba .

En C ++, ¿por qué string::find devuelve size_type y no un iterator ?

Tendría sentido porque las funciones como string::replace o string::insert toman iteradores como entrada, por lo que podría find algún carácter y pasar inmediatamente el iterador devuelto para replace , etc.

Además, std::find devuelve un iterador. ¿Por qué es diferente std::string::find ?


Probablemente sea más útil obtener un número de la búsqueda porque entonces puede usar el operador [] o substr() para obtener los caracteres que acaba de buscar.

Además, si quieres un iterador, siempre puedes begin() + pos


Supongo que es porque, en general, los miembros de la cadena trabajan en índices en lugar de iteradores y esto facilita el uso del valor devuelto. Siempre puede usar std::find si desea obtener un iterador.


Todas las funciones de cadena operan en índices, algunas funciones (como replace() e insert() ) solo son compatibles con iteradores. Por lo tanto, el resultado de find() se puede usar directamente en esas funciones. Dado que no puede haber dos funciones find() que solo difieren según el tipo de retorno (una que devuelve un iterador, una que devuelve un índice), se tuvo que elegir una.