• Jueves 14 de Noviembre de 2024, 18:55

Autor Tema:  Vectores Stl  (Leído 2566 veces)

paderni

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Vectores Stl
« en: Sábado 15 de Mayo de 2004, 21:33 »
0
Hola:

Tengo una gran pelea con ese agradable contenedor de la stl llamado vector,

He declarado un vector tal que así:

vector <valor> v;

donde valor es un tipo definido por mi , que tiene como campos:

int conocido;
atributo & atr;

atributo también es un tipo definod por mi y tiene:

String id;
vector <String> vPosibles;

El problema viene cuando creo un objeto de tipo valor

valor v (atr, 1);

previamente creo uno de tipo atributo

vector <String> aux;
aux.push_back("a");
aux.push_back("b");
atributo atr( "Clase",aux);

pero cuando hago
v.push_back(aux);

No hace lo que quiero :(.

¿Alguien sabe donde tengo el fallo?

Saludos.

PD:Porfavor contestarme, aunque no esteis seguros de que sea por eso por lo que no tira.

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Vectores Stl
« Respuesta #1 en: Sábado 15 de Mayo de 2004, 21:59 »
0
Hola!!!!!!

Antes q nada la clase String (o el tipo de dato String)  como en JAVA no existe en C/C++ por si sola. Vos podes haberte creado una propia pero no es algo standard salvo q sea el de la STL y hayas hecho algo asi:

Typedef std::string String;

y ahi no habria problemas (ojo, no me acuerdo si el typedef iba con mayuscula al principio).

Lo otro q veo q estas haciendo mal es q le estas pusheando al vector el mismo vector, o sea, esta mal eso.
Ahhhhhh, estoy viendo q v es de tipo valor y tambien de tipo vector<valor>.
Lo q no entiendo es q eso ni te deberia compilar porque tenes dos variables con el mismo nombre.
Lo q deberias hacer es algo asi:

Valor MiValor(conocido, atr); //conocido ya seteado lo mismo q atr tal
                                          //cual lo hiciste

v.push_back(MiValor);

Espero q haya servido.

P.D.: La STL es mas q agradable te digo, salvo q vos hayas hecho algo mejor q no pierda memoria ni nada por ningun lado, q tenga como 40 metodos, q corra en ambientes UNIX, no se, me parece q es algo bueno o no????

Salu2!!!!

paderni

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Vectores Stl
« Respuesta #2 en: Sábado 15 de Mayo de 2004, 22:19 »
0
Estuve mirando en la ayuda del builder c++ 6.0 y typedef va con minusculas todo.

Gracias por comentar me lo del String que es distinto de string :)

Es que estoy trabajando con el Builder y String piensa que es AnsiString y de ahí viene el lio.

Muchas Gracias :)

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Vectores Stl
« Respuesta #3 en: Domingo 16 de Mayo de 2004, 02:04 »
0
Hola de nuevo!!!!!!

El string tampoco es una tipo de datos C ni una clase de C++.
Los "strings" en C/C++ se manejan a traves de punteros a caracteres (no es como en Pascal q tenes un string de 255 caracteres o en JAVA q tenes una clase String, una clase StringBuffer, y asi con todo), o sea, "char*". Para poder manejarlos bien deberias manejar punteros aunque a un nivel bastante simple. Con el uso de char*, para poder realizar las operaciones basicas y q sean standard deberias incluir las librerias q te permiten hacer estas operaciones:
strcpy()
strcat()
strlen()
strstr()
Con esas deberia alcanzar y mirando las man pages o la MSDN te apareceran referencias a mil mas q son muy utiles.

Ahora, si estuvieras programando en MFC, podrias usar CString como dato "string", o como te dije antes, tambien bajo consola, MFC o lo q sea de GNU/LINUX podes usar los string de la STL, pero..............string como dijiste vos, se puede???? si se puede, quien es el q implemento eso??? o es algo q desarrollaste vos??? Yo tengo entendido y creo no estar equivocado q el string como dijiste vos no existe y si llegara a existir dudo q sea ANSI.

Bueno, te dejo, salu2!!!!!!!!!!

tiwas

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Vectores Stl
« Respuesta #4 en: Domingo 16 de Mayo de 2004, 17:46 »
0
hola que tal? Pues te digo que en C++ si es posible usar la cadenas, para ello puedes usar la clase string (de la bibliotea estandar de C++), claro que tienes que incluir la libreria "string" (o sea, #include <string>) o la "string.h" que es una libreria antigua, para declarar una cadena seria: "string nombre_cadena;"

Por lo del fallo en tu programa, corrigeme si me equivoco,
Me parece que estas tratando de "meter" en v  a aux (v.push_back(aux)), pero aux es un vector de string y v es un vector de de valor. En resumen, el vector v, solo recibe variables de tipo valor.

Espero haber ayudado en algo. Cualquier cosa no dudes en preguntar. :)

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Vectores Stl
« Respuesta #5 en: Domingo 16 de Mayo de 2004, 20:04 »
0
Hola tiwas!!!!

Te cuento q

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Vectores Stl
« Respuesta #6 en: Domingo 16 de Mayo de 2004, 20:10 »
0
Hola tiwas!!!!

Te cuento q cuando incluis a string.h es distinto de incluir a string . El primero te permite realizar ciertos operaciones y el segundo es el string de la STL.
El tipo de dato string en C/C++ no existe asi como decis vos. Si existen ciertas variaciones pero como dije antes no existe como si existe en Pascal o en otros lenguajes. Que existan mil millones de librerias q lo implementen puede ser, pero no existen por si solos, o sea, no se si son STANDARD.
Q haya algunos compiladores q lo traigan no implica q luego corra en otro sistema operativo por ejemplo.
La verdad es q no se donde viste el string, OJO, no niego q exista, pero si te digo si lees algun libro de C/C++ te aseguro q no lo dan comop tipo de dato y en C++ no existe como clase. Existen distintas implementaciones de los string como en MFC como dije antes pero asi como decis vos, lo dudo.
Por favor Juank te pido q me respondas si existe o no string a secas como tipo de dato nativo del lenguaje.

Salu2!!!!!

P.D.: El otro mensaje lo mande porque toque el mouse sin querer!!!!!!

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Vectores Stl
« Respuesta #7 en: Domingo 16 de Mayo de 2004, 21:44 »
0
Hola

En C++ la clase string forma parte de la librería estándar, dentro del namespace std, como los streams, y viene documentada en la especificación. Si algún compilador no la incluye es que no sigue la especificación (es como coger y no implementar la cadenas en Pascal, u olvidarse de crear los fstreams de C++ para acceder a ficheros). Que haya visto, viene en VS6, VS.NET y gcc (el de Borland nunca lo he usado, pero seguro que viene).

Un saludo.

Ruben3d

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Vectores Stl
« Respuesta #8 en: Domingo 16 de Mayo de 2004, 22:06 »
0
Hola Ruben3d!!

Entonces estas diciendo q la unica clase string es la de la STL, no???

Salu2!!!!!!

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Vectores Stl
« Respuesta #9 en: Lunes 17 de Mayo de 2004, 13:11 »
0
Hola.

Digo que la única clase string que figura en el estándar es la que está en el namespace std, que es una especialización de basic_string, y se incluye con el fichero de cabecera <string>. Eso no excluye que en las MFC, en las nuevas clases .NET o cualquier otro paquete de clases incluya también su propia clase string, que puede llamarse igual siempre y cuando esté en otro namespace.

Podéis ver todas las clases que componen el STL en la web de sgi, aqui os dejo un link a basic_string (con un ejemplo de string):

basic_string<charT, traits, Alloc>

string está definido de esta manera:

Código: Text
  1. typedef basic_string&#60;char&#62; string;
  2.  

Un saludo.

Ruben3d