Entonces, escribí un montón de código que accede a elementos en un vector stl por índice [], pero ahora necesito copiar solo una parte del vector. Parece que vector.insert(pos, first, last)
es la función que quiero ... excepto que solo tengo primero y último como ints. ¿Hay alguna forma agradable de obtener un iterador para estos valores?
201
Respuestas:
Prueba esto:
fuente
std::next(v.begin(), index)
manera mencionada por @dirkgently
( v.begin() + index )
agradable y rápido para vectorespero la forma más genérica y para los iteradores de acceso aleatorio también funciona a tiempo constante.
std::advance
( v.begin(), index )
EDITAR
diferencias en el uso:
o
agregado después de las notas @litb.
fuente
std::vector
, no tiene sentido usarlostd::advance
. Solo lo induce a pensar que está escribiendo código agnóstico de contenedor (que no lo hace, pensando en reglas de invalidación de iterador, diferentes complejidades de tiempo de ejecución y otras cosas). El único caso cuandostd::advance
tiene sentido es cuando escribe una plantilla usted mismo que no sabe con qué tipo de iterador está tratando.También;
auto it = std::next(v.begin(), index);
Actualización: necesita un compilador compatible con C ++ 11x
fuente
O puedes usar
std::advance
fuente
Actualmente std :: vector están destinados a ser utilizados como pestaña C cuando sea necesario. (El estándar C ++ solicita que para la implementación de vectores, que yo sepa, reemplazo de la matriz en Wikipedia ) Por ejemplo, es perfectamente legal hacer lo siguiente, según yo:
Por supuesto, foo no debe copiar la dirección pasada como parámetro y almacenarla en algún lugar, o debe asegurarse en su programa de no insertar nunca ningún elemento nuevo en vec o solicitar cambiar su capacidad. O falla de segmentación de riesgo ...
Por lo tanto, en su ejemplo conduce a
fuente