vectores una programacion matriz inicializar ingresar imprimir guardar dev datos como arreglos arreglo c++ c++11 libstdc++

c++ - una - Usando std:: array con listas de inicialización



ingresar datos en una matriz c++ (2)

Para añadir a la respuesta aceptada:

std::array<char, 2> a1{''a'', ''b''}; std::array<char, 2> a2 = {''a'', ''b''}; std::array<char, 2> a3{{''a'', ''b''}}; std::array<char, 2> a4 = {{''a'', ''b''}};

Todos trabajan en GCC 4.6.3 (Xubuntu 12.01). Sin embargo,

void f(std::array<char, 2> a) { } //f({''a'', ''b''}); //doesn''t compile f({{''a'', ''b''}});

Lo anterior requiere dobles llaves para compilar. La versión con llaves individuales produce el siguiente error:

../src/main.cc: In function ‘int main(int, char**)’: ../src/main.cc:23:17: error: could not convert ‘{''a'', ''b''}’ from ‘<brace-enclosed initializer list>’ to ‘std::array<char, 2ul>’

No estoy seguro de qué aspecto de la inferencia / conversión de tipo hace que las cosas funcionen de esta manera, o si esto es una peculiaridad de la implementación de GCC.

A menos que me equivoque, debería ser posible crear un std: array de estas maneras:

std::array<std::string, 2> strings = { "a", "b" }; std::array<std::string, 2> strings({ "a", "b" });

Y, sin embargo, al usar GCC 4.6.1 no puedo hacer funcionar ninguno de estos. El compilador simplemente dice:

expected primary-expression before '','' token

y sin embargo, las listas de inicialización funcionan bien con std :: vector. Entonces, ¿cuál es? ¿Me equivoco al pensar que std :: array debería aceptar las listas de inicialización, o el equipo de la Biblioteca de C ++ de GNU es un tonto?


std::array es divertido. Se define básicamente así:

template<typename T, int size> struct std::array { T a[size]; };

Es una estructura que contiene una matriz. No tiene un constructor que tome una lista de inicializadores. Pero std::array es un agregado de las reglas de C ++ 11 y, por lo tanto, se puede crear mediante la inicialización de agregados. Para agregar la inicialización de la matriz dentro de la estructura, necesita un segundo conjunto de llaves:

std::array<std::string, 2> strings = {{ "a", "b" }};

Tenga en cuenta que el estándar sugiere que las llaves adicionales se pueden eliminar en este caso. Así que es probable que sea un error de GCC.