Por ejemplo, ¿esta expresión es válida en semántica?¿Es válido comparar iteradores que se obtienen del contenedor por separado?
container.begin() == container.begin();
Por ejemplo, ¿esta expresión es válida en semántica?¿Es válido comparar iteradores que se obtienen del contenedor por separado?
container.begin() == container.begin();
Sí, siempre que ninguno de los iteradores haya sido invalidado.
Por ejemplo, lo siguiente no sería válida:
std::deque<int> d;
std::deque<int> begin1 = d.begin();
d.push_front(42); // invalidates begin1!
std::deque<int> begin2 = d.begin();
assert(begin1 == begin2); // wrong; you can't use begin1 anymore.
Sí, begin()
devolverá el mismo repetidor dado una instancia del contenedor, a menos que cambie el contenedor de alguna manera (end()
tiene esta propiedad también). Por ejemplo, std::vector::push_back()
puede hacer que la matriz sea reasignada para acomodar nuevos elementos.
tener cuidado usando el término 'same'. No creo que todos los contenedores devuelvan el mismo iterador para el mismo artículo. Aunque compararán igual en comparación con ==. –
Tienes razón, he reformulado mi respuesta. –
El comentario de Martin York aún se cumple: cada llamada a 'begin()' devolverá un iterador diferente, incluso si lo comparan. Esto está siendo quisquilloso en este momento, pero los iteradores no serán lo mismo. '& c.begin()! = & c.begin()' incluso si 'c.begin() == c.begin()' (asumiendo el contexto de un solo hilo). –