Consulta sobre declaración de vectores

Iniciado por Orubatosu, 22 Noviembre 2014, 21:51 PM

0 Miembros y 1 Visitante están viendo este tema.

Orubatosu

Una consulta de la que los expertos se van a reir, pero como no lo soy  ;D

Un string cualquiera de una dimensión puede declararse directamente.


int a[5] = {-1, 1, 5, 12, -4}


Creo que no es posible (al menos el compilador me regaña), pero ¿existe algún constructor que me permita algo parecido con un vector?

¿y con un vector de mas de una dimensión?

Soy plenamente consciente de que puedo "apañar" una función a la que le pase un string o un array y lo meta en un vector, pero me pregunto si existe una forma diferente de hacerlo

Supongamos que tengo un vector tal que:


vector <vector<int> > Por_ejemplo


¿Existe algún modo de construir por ejemplo la fila 0 mediante una declaración del estilo de los arrays?

Si me decís "no, no puedes", pues me apaño una función para pasar los valores, pero si existe una forma diferente de hacerlo, sería mas que interesante conocerla

Según la referencia oficial de C++ esto no se puede, pero claro, preguntar no cuesta nada, y lo mismo aprendo algo
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

ivancea96

Puedes usar su constructor:
Código (csharp) [Seleccionar]
vector<char> v(5, 'W'); // {'W', 'W', 'W', 'W', 'W'}

Pero lo que tú dices no se puede que yo sepa.

Siempre puedes hacer una función que transforme un array en un vector.

rir3760

Cita de: Orubatosu en 22 Noviembre 2014, 21:51 PMUn string cualquiera de una dimensión puede declararse directamente.
int a[5] = {-1, 1, 5, 12, -4}

Creo que no es posible (al menos el compilador me regaña), pero ¿existe algún constructor que me permita algo parecido con un vector?
Depende del modo de compilación, como indicar este (si para empezar es posible) depende del compilador utilizado.

A partir del nuevo estándar de C++ (C++11) se puede utilizar una lista de valores para inicializar varios tipos incluido la clase vector, por ejemplo:
Código (cpp) [Seleccionar]
vector<int> v = {4, 3, 2, 1, 0};

for (auto it = v.begin(); it != v.end(); ++it)
   cout << *it << endl;


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Orubatosu

#3
Aha... gracias por la aclaración. Me temo que el compilador GNU no contempla de momento todo el estándar C++11, de manera que tiraré "por la calle de enmedio" y hace una función para estas cosas. Afortunadamente según estoy viendo, si C++ no te deja hacer una cosa por un camino, puedes siempre intentarlo por otro sitio




Un tema que posiblemente muchos conocen, pero aprovecho para los que no.

No es necesario hacer una función para asignar un string a un vector, es posible hacerlo mediante el propio constructor del mismo:


    char A[] = {'K', 'R', 'O', 'N', 'O', 'S'};
    vector<char> Salida(A, A +sizeof(A) / sizeof(char));

    string S_Uno[] = {"Uno", "Dos", "Tres"};
    string S_Dos[] = {"Cuatro", "Cinco", "Seis"};
    vector<string> Uno(S_Uno, S_Uno +sizeof(S_Uno) / sizeof(string));
    vector<string> Dos(S_Dos, S_Dos +sizeof(S_Dos) / sizeof(string));


Tengo problemas a la hora de construir vectores de mas de una dimensión, pero para los vectores "normales" esta solución es bastante rápida
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998