2012-04-19 18 views
23

¿Puedo inicializar un vector STL con 10 del mismo número entero en una lista de inicializadores? Mis intentos hasta ahora me han fallado.¿Puedo inicializar un vector STL con 10 del mismo número entero en una lista de inicializadores?

+6

Hay una [ 'std :: vector <> constructor de'] (http://en.cppreference.com/w/cpp/container/vector/vector) (2) que hace eso; ¿Por qué querrías una lista de inicializadores? – ildjarn

+1

@ildjarn: creo que quiere decir en una lista de inicialización de constructor, y no en el cuerpo constructor. – GManNickG

+0

@GManNickG: A mi no me suena así. El OP solicita una forma de inicializar un vector con X cantidad de elementos, todos configurados con el mismo valor. Sí, menciona una lista de inicialización, pero dado que ya hay un constructor que cumple el * requisito * que debería ser lo suficientemente bueno –

Respuesta

25

creo que quiere decir esto:

struct test { 
    std::vector<int> v; 
    test(int value) : v(100, value) {} 
}; 
+5

Esta respuesta de solo código está mal documentada y es más complicada de lo necesario. Vea la respuesta de Ed S. a continuación. – Blake

+5

@ Cokemonkey11: Esta respuesta * no * está documentada, puedes encontrar la documentación en tu referencia favorita (la mía es cppreference). Es * no * más complicado de lo necesario, sin la clase y el constructor La respuesta de Ed S. no inicializa un vector * en una lista de inicializadores *, que es parte de la pregunta. Para este caso no importaría mucho, pero considere si la pregunta era sobre una matriz de entradas, la inicialización en la pila y como parte de la lista de inicializadores son diferentes. –

0

Se puede publicar lo que está haciendo

int i = 100; 
vector<int> vInts2 (10, i); 

vector<int>::iterator iter; 
for(iter = vInts2.begin(); iter != vInts2.end(); ++iter) 
{ 
    cout << " i " << (*iter) << endl; 
} 
4

Si estás usando C++ 11 y el CCG, usted puede hacer esto:

vector<int> myVec() {[0 ... 99] = 1}; 

Se llama osciló inicialización y es una Extensión solo para GCC.

+1

Guau, nunca he oído hablar de eso. Por supuesto, es mejor usar el constructor correcto. – chris

+1

Sí. Pero esto es útil para matrices y estructuras. De todos modos, GCC tiene un montón de extensiones que hacen cosas locas. Mejor se adhiere a C++ estándar. –

+0

La extensión "Inicializadores designados" solo está disponible para el código C, no para C++. Para obtener una lista de las extensiones de GCC disponibles, consulte https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions y https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions .html # C_002b_002b-Extensions –

2

Usted puede hacer eso con std::vector constructor:

vector(size_type count, 
       const T& value, 
       const Allocator& alloc = Allocator()); 

que tiene count y value a repetirse.

Si desea utilizar listas de inicializador puede escribir:

const int x = 5; 
std::vector<int> vec {x, x, x, x, x, x, x, x, x, x}; 
81

utilizar el constructor adecuado, que tiene un tamaño y un valor predeterminado.

int number_of_elements = 10; 
int default_value = 1; 
std::vector<int> vec(number_of_elements, default_value); 
2

La lista de inicialización para el vector está soportado de C++ 0x. Si se ha compilado con C++ 98

int number_of_elements = 10; 
int default_value = 1; 
std::vector<int> vec(number_of_elements, default_value); 
Cuestiones relacionadas