Comparando iteradores de contenedores distintos
Cuando se trabaja con contenedores, es esencial comprender las implicaciones de comparar iteradores de diferentes contenedores. Surge la pregunta: ¿está permitido comparar iteradores que pertenecen a contenedores distintos?
Considere el siguiente código:
std::vector foo;
std::vector bar;
std::cout ¿La expresión foo.begin () == bar.begin () producirá falso o conducir a un comportamiento indefinido?
en el estándar C 11 (n3337) puede arrojar luz sobre este dilema de dilema:
Sección 24.2.1 establece que dos iteradores, i y j, se consideran accesibles si existe una secuencia finita de las operaciones I que hacen que me ocurran a j. secuencia. -
- comparando iteradores de diferentes contenedores
[&] reenseyriterators, que incluyen accesorizadores aleatorios, están sujetos a la sección 24.2.5. esta sección especifica que solo se puede utilizar para compáser a los iteradores de la misma secuencia.
dada estos requisitos, la comparación de iteradores de diferentes contenedores es un comportamiento indefinido. -
- lwg emisión #446
lwg #446 aborda explícitamente esta cuestión, proponiendo la siguiente adición a la norma:
del resultado directamente de los resultados de la siguiente adición: evaluando indirectamente cualquier función de comparación o el operador binario con dos valores de iterador como argumentos que se obtuvieron de dos rangos diferentes R1 y R2 [...] que no son subrangos de un rango común de un rango común, a menos que se describan explícitamente lo contrario. iteradores y contenedores de manipulación en su código.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3