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.