Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Orubatosu en 22 Noviembre 2014, 21:51 pm



Título: Consulta sobre declaración de vectores
Publicado por: Orubatosu en 22 Noviembre 2014, 21:51 pm
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.

Código:
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:

Código:
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


Título: Re: Consulta sobre declaración de vectores
Publicado por: ivancea96 en 23 Noviembre 2014, 00:00 am
Puedes usar su constructor:
Código
  1. 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.


Título: Re: Consulta sobre declaración de vectores
Publicado por: rir3760 en 23 Noviembre 2014, 04:07 am
Un string cualquiera de una dimensión puede declararse directamente.
Código:
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
  1. vector<int> v = {4, 3, 2, 1, 0};
  2.  
  3. for (auto it = v.begin(); it != v.end(); ++it)
  4.   cout << *it << endl;

Un saludo


Título: Re: Consulta sobre declaración de vectores
Publicado por: Orubatosu en 23 Noviembre 2014, 11:59 am
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:

Código:
    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