push_front index front c++ stl vector iterator

index - C++ STL Vectors: ¿Obtener iterador del índice?



vector c++ insert at index (5)

Actutally std :: vector están destinados a ser utilizados como pestaña C cuando sea necesario. (Según las normas C ++, para la implementación de vectores, hasta donde yo sé - reemplazo de array en Wikipedia ) Por ejemplo, es perfectamente legal hacer esto, según yo:

int main() { void foo(const char *); sdt::vector<char> vec; vec.push_back(''h''); vec.push_back(''e''); vec.push_back(''l''); vec.push_back(''l''); vec.push_back(''o''); vec.push_back(''/0''); foo(&vec[0]); }

Por supuesto, cualquiera de los foo no debe copiar la dirección pasada como parámetro y almacenarla en alguna parte, o debe asegurarse de que en su programa nunca inserte ningún elemento nuevo en vec o solicite cambiar su capacidad. O riesgo de falla de segmentación ...

Por lo tanto, en su ejemplo, esto lleva a

vector.insert(pos, &vec[first_index], &vec[last_index]);

Entonces, escribí un montón de código que accede a elementos en un vector stl por índice [], pero ahora necesito copiar solo un fragmento del vector. Parece que vector.insert(pos, first, last) es la función que quiero ... excepto que solo tengo first y last as ints. ¿Hay alguna buena manera de que pueda obtener un iterador para estos valores?


O puede usar std::advance

vector<int>::iterator i = L.begin(); advance(i, 2);


Prueba esto:

vector<Type>::iterator nth = v.begin() + index;


También; auto it = std::next(v.begin(), index);

Actualización: necesita un compilador compatible con C ++ 11x


forma mencionada por @dirkgently ( v.begin() + index ) agradable y rápida para vectores

pero std::advance ( v.begin(), index ) más genérica y para iteradores de acceso aleatorio también funciona a tiempo constante.

EDITAR
diferencias en el uso:

std::vector<>::iterator it = ( v.begin() + index );

o

std::vector<>::iterator it = v.begin(); std::advance( it, index );

agregado después de notas @litb.