soy rindo por libre letra juicio hay esclavo contra club cifra argumento amor ahora acordes c++ stl containers

c++ - rindo - no hay argumento ni juicio contra mi



¿Por qué no hay argumento de capacidad en los constructores para los contenedores? (3)

Si quiero establecer la capacidad en un std::vector debo llamar a .reserve(...) , ¿hay alguna razón por la que no haya un argumento de capacidad en el constructor para los contenedores en stl, std::string , std::vector ?


Hay una razón obvia: ¿cómo sería ese constructor?

Todos los contenedores de secuencia ya tienen un constructor que se puede llamar con un solo argumento entero. Ese constructor cambia el tamaño del contenedor para tener el número especificado de elementos.

Sí, podría agregar un segundo parámetro (como bool reserve_instead_of_resize ) para poder usar este constructor tanto para el tamaño inicial como para las reservas iniciales, pero luego creo que el resultado final sería confuso.


Para crear un vector y especificar su capacidad al mismo tiempo, cree un vector con la capacidad deseada, copie en los elementos que desee y borre del iterador devuelto por copia. Si el constructor es lento, simplemente escriba otro constructor con parámetros especiales que solo reserve memoria.

int main (int argc, char** argv) { std::vector<size_t> v (10, 0); size_t tmp [3] = {0, 1, 2}; std::vector<size_t>::iterator i (v.begin ()); i = std::copy ((const size_t*)tmp, (const size_t*) &tmp [3], v.begin ()); v.erase (i, v.end ()); std::cout << "/tv capacity == " << v.capacity () << std::endl; }

saldrá:

v capacidad == 10


Usted podría simplemente hacer una función para crear un vector reservado:

// make_reserved_vector template <typename... T> std::vector<T...> make_reserved_vector(size_t n) { std::vector<T...> vec; vec.reserve(n); return vec; }

y usar como:

auto myvec = make_reserved_vector<int>(32768);