wikilibros vectores usar son que para los lista librería librerias libreria iteradores clase c++ stl

c++ - vectores - ¿Sabe el vector reservar primero cuando se inicializa con un par de iteradores?



que son los iteradores en c++ (2)

Considere el siguiente código.

struct MyData{ MyData(const BYTE* pData, size_t uSize) : bucket_(pData, pData + uSize) {} std::vector<BYTE> bucket_; };

¿Mi bucket_ hace la reserve primero al inicializar desde un par de iteradores? Algo como vec.reserve(std::distance(begIter, endIter)) .

O simplemente realiza una serie de push_back o back_inserter_iterator::operator= ?

Si no es así, es posible que deba inicializarlo con uSize of 0 y luego hacer las memcpy_s en el bloque del constructor.


¿Mi bucket_ hace la reserve primero al inicializar desde un par de iteradores?

Sí, lo hace en efecto.

Proyecto estándar:

Complejidad: hace solo N llamadas al constructor de copia de T (donde N es la distancia entre la primera y la última) y no se realizan reasignaciones si los iteradores primero y último son de categorías de acceso directo, bidireccional o aleatorio. Realiza llamadas de orden N al constructor de copia de T y reasignaciones de registro de pedidos (N) si solo son iteradores de entrada.

(Los punteros son iteradores de acceso aleatorio)


Sí, se garantiza que no habrá reasignaciones, porque los punteros son RandomAccessIterators. vector.cons/9

template <class InputIterator> vector(InputIterator first, InputIterator last, const Allocator& = Allocator());

Efectos: construye un vector igual al rango [first, last) , utilizando el asignador especificado.

Complejidad: hace solo N llamadas al constructor de copia de T (donde N es la distancia entre la first y la last ) y no se realizan reasignaciones si los iteradores primero y último son de categorías de acceso directo, bidireccional o aleatorio . Realiza llamadas de orden N al constructor de copia de T y reasignaciones de log(N) pedidos log(N) si solo son iteradores de entrada.