2010-07-21 4 views

Respuesta

11

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. 
4

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.

+1

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 ==. –

+0

Tienes razón, he reformulado mi respuesta. –

+1

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). –

Cuestiones relacionadas