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 lareserve
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 deT
(dondeN
es la distancia entre lafirst
y lalast
) y no se realizan reasignaciones si los iteradores primero y último son de categorías de acceso directo, bidireccional o aleatorio . Realiza llamadas de ordenN
al constructor de copia deT
y reasignaciones delog(N)
pedidoslog(N)
si solo son iteradores de entrada.