• Viernes 8 de Noviembre de 2024, 20:11

Autor Tema:  Como crear una lista  (Leído 3986 veces)

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Como crear una lista
« en: Lunes 6 de Abril de 2009, 19:55 »
0
Buenas...tengo un problema bastante tonto...llevo dias y dias dandolo vueltas y nada...A ver si me podeis hechar una mano
Tngo este codigo :
int main(int argc, char *argv[])
{
    // Creation of a list of cars
    vector<Car *> cars;
    // Adding cars to the list
    Car *c1= new Car("AAA1111", "Leon");
    cars.push_back(c1);
    Car *c2= new Car("BBB2222", "Sierra");
    cars.push_back(c2);
    Car *c3= new Car("ZZZ8888", "Alhambra");
    cars.push_back(c3);
    Car *c4= new Car("FFF4444", "Mondeo");
    cars.push_back(c4);
    Car *c5= new Car("NNN0000", "Avensis");

    // Let's print to the console all the cars in the list
    cout << listCars(cars) << endl;
Tengo que hacer la parte de codigo que se encargue de hacer la lista y lo maximo que he conseguido hacer es esto :
string listCars(vector<Car*> cars) {
    stringstream res;
    int suma;
      for (int i = 0; i<5; i++){
        suma+= cars;
       

    res<< cars->str();
}

    return (res.str());
}

str es esto::
string Car::str() {
   stringstream res;
   res << "plate:" << this->getPlate();
   res << "    model:" << getModel();
   return res.str();
}

El codigo que crea la lista no funciona.... y nose porque...me podeis dar alguna pista --_--''

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #1 en: Lunes 6 de Abril de 2009, 20:30 »
0
La proxima vez por favor un codigo que compile asi no tardo un buen rato en hacerlo yo.

Lo ideal es usar un iterador pero asi te funcionara:
Código: Text
  1. for (int i = 0; i < cars.size(); i++)
  2.  

El problema es que nunca empujaste el c5, con lo cual no habia 5 elemento en el vector.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #2 en: Lunes 6 de Abril de 2009, 23:03 »
0
Voy a probarlo rapidamente y ahora os cuento....muxisimas gracias

EI: juntando mensajes.

bua...no habia caido tio XD el .size....muchisimas gracias  :beer:
Por cierto...para separar las lineas como deberia hacerlo..quiero decir:
que cada vez k introduzca un modelo y su matricula saltara una linea y luego pusiera otra...
Ejemplo
PLATE: AAA1111   MODEL: LEON
PLATE: AAAA4322 MODEL : CHOTO

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #3 en: Martes 7 de Abril de 2009, 00:36 »
0
De nadas  B) Lo del salto de linea lo iba a poner como PD en el mensaje anterior pero al final me dije, bueno, lo querra asi  :alien:

Código: Text
  1. res<< cars[i]->str() << endl;
  2.  

PD. ¿Modelo choto? Juaz  :lol:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #4 en: Martes 7 de Abril de 2009, 00:38 »
0
eso ya lo tenia...el problema es que no hace el "enter" entre los modelos...

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #5 en: Martes 7 de Abril de 2009, 00:47 »
0
Si pones el endl tal como figura ahi arriba el formato es este:
plate:XXXXX model:XXXXX
plate:XXXXX model:XXXXX
plate:XXXXX model:XXXXX
plate:XXXXX model:XXXXX
etc.

¿No es eso lo que querias?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #6 en: Martes 7 de Abril de 2009, 00:48 »
0
JUAS....y yo sin darme cuenta XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD :hitcomp:

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #7 en: Martes 7 de Abril de 2009, 03:19 »
0
Bueno...ahora tengo otro problema bien gordo...debo ordenar la lista dicha antes segun plate o model...y me proponen hacerlo asi:
bool orderCarsByPlate(Car *c1, Car *c2)
{
  return (c1<c2);

}

/**
 * @param cars the cars vector to be ordered by plate
 * @return the cars vector be ordered by plate
 */
vector<Car *> orderCarsByPlates(vector<Car *> cars)
{
           string plate;
           for ( int i=0; i < cars.size(); i++)
           plate= (cars->getPlate());
           vector<string> myvector (plate);
           vector<int>::iterator it;
           
           sort (plate.begin(),plate.end(),orderCarsByPlates)
           
            for (it=plate.begin(); it!=plate.end(); ++it){
                *it= cars;
   

   return cars;
}

Bueno, he editado porque el metodo swap no me sale y no lo entiendo tampoco. Ahora estoy intentando utilizar por el metodo "sort" que me ha recomendado el profesor Y me ha salido algo asi. Tengo que ordenar la lista , ordenandola con las matriculas y luego ordenandolas con los modelos. Como podria ordenarla con el metodo sort??
P.D Pido ayuda por aqui ya que mi profesor suda de mi el hijo***. Doy mi msn por si alguien me kiere ayudar:satanempire_666@hotmail.com..estoy dispuesto hasta pagar XD.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #8 en: Martes 7 de Abril de 2009, 14:21 »
0
Ahi tenes un bucle infinito, orderCarsByPlate llama a sort y sort llama a orderCarsByPlate.

Mira aca como funciona sort.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #9 en: Martes 7 de Abril de 2009, 15:45 »
0
entonces que deberia hacer? crear un vector nuevo que haga referencia a ordercarsbyplate...es que sienceramente nose que hacer la verda...
bool orderCarsByPlate(Car *c1, Car *c2)
{
return (c1<c2);

}

vector<Car *> orderCarsByPlates(vector<Car *> cars)
{
string plate;
for ( int i=0; i < cars.size(); i++)
plate= (cars->getPlate());
vector<string> myvector (plate);
vector<int>::iterator it;
sort  (plate.begin(),plate.begin()+4)
sort (plate.begin(),plate.end(),orderCarsByPlates)

for (it=plate.begin(); it!=plate.end(); ++it){
*it= cars;


return cars;
}nuevo vector que haga referiencia a ordercarsbyPlATE??estaria en las mismas

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #10 en: Martes 7 de Abril de 2009, 15:47 »
0
Eso tendria mas sentido supongo, cuando llegue a casa donde tengo el esqueleto que tuve que hacer para compilar originalmente tu codigo me fijo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #11 en: Martes 7 de Abril de 2009, 16:03 »
0
hombre me seria de gran ayuda intentar tener el codigo para mañana...a ver si podemos hacer algo. Estaria tan agradecido...si necesitas un favor sexual o dinero yo te lo hago XDDDDDDD  :wub:

Intentare mirar a ver que puedo hacer...pero me sigue dando fallo en el bucle for :S :hitcomp:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #12 en: Martes 7 de Abril de 2009, 16:11 »
0
¿Estas cambiando el codigo, no?

Esto es lo que tiene logica siendo que sobrecargas la funcion orderCarsByPlates:
Código: Text
  1. sort (plate.begin(),plate.end(),orderCarsByPlates);
  2.  

No necesito ningun favor, gracias, ya le hubiera dado una ojeada si hubieras dejado una version compilable pero como no lo hiciste y no me gusta trabajar el doble no voy a continuar hasta tener el esqueleto que tuve que crear.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #13 en: Martes 7 de Abril de 2009, 16:18 »
0
Bueno..he terminado de cambiar el codigo. Me compila correctamente sin ningun error, pero no me ordena  nada. a ver si ves algo raro
bool orderCarsByPlate(Car *c1, Car *c2)
{
  return (c1<c2);   
}


vector<Car *> orderCarsByPlates(vector<Car *> cars)
{
           
           for ( int i=0; i < cars.size(); i++)
           plate= (cars->getPlate());
           vector <string> plate (plate);
           vector<int>::iterator it;
           sort (plate.begin(),plate.begin()+2);
           sort (plate.begin()+2,plate.end(),orderCarsByPlates);
           sort (plate.begin(),plate.end(),orderCarsByPlates);
           
            for (it=plate.begin(); it!=plate.end(); ++it){
                it= cars;
   

   return cars;
}

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #14 en: Martes 7 de Abril de 2009, 16:49 »
0
Segun entiendo sobrecargando el operador < en Car lo unico que tendrias que hacer es esto:

Código: Text
  1. sort (cars.begin(),cars.end());
  2.  

begin y end son los intervalos sobre los que trabajara el algoritmo, no hace falta hacer un bucle si ya le decimos que ordene todo el vector.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #15 en: Martes 7 de Abril de 2009, 17:08 »
0
Entonces estas diciendo de cambiar plate...que seria la matricula por cars? He probado lo que has dicho y sigue sin ordenarme nada :S
{
return (c1<c2);
}


vector<Car *> orderCarsByPlates(vector<Car *> cars)
{

for ( int i=0; i < cars.size(); i++)
plate= (cars->getPlate());
vector <string> plate (plate);
vector<int>::iterator it;
sort (cars.begin(),cars.begin()+2);
sort (cars.begin()+2,cars.end(),orderCarsByPlates);
sort (cars.begin(),cars.end(),orderCarsByPlates);

for (it=cars.begin(); it!=cars.end(); ++it){
it= cars;


return cars;

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #16 en: Martes 7 de Abril de 2009, 17:57 »
0
Yo decia otra cosa pero parece que al llamar a sort sin parametros no llama al operador sobrecargado < de Car (supongo que esto es por el tipo de datos del vector que es un puntero), entonces es asi de simple:

Código: Text
  1. bool orderCarsByPlate(Car *c1, Car *c2)
  2. {
  3.     return c1->plate < c2->plate;
  4. }
  5.  

Y en tu main:
Código: Text
  1.  
  2. // Let's print to the console all the cars in the list
  3. cout << listCars(cars) << endl;
  4.  
  5. sort(cars.begin(), cars.end(), orderCarsByPlate);
  6.  
  7. cout << listCars(cars) << endl;
  8.  

Vas a ver dos outputs, el segundo ordenado por la patente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #17 en: Martes 7 de Abril de 2009, 20:03 »
0
hasta que no llegue a casa no lo podre probar...a ti te funciona???:S

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #18 en: Martes 7 de Abril de 2009, 20:51 »
0
Perfectamente, sino no lo hubiera puesto.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #19 en: Martes 7 de Abril de 2009, 21:00 »
0
entonces el codigo al completo quedaria asi:
Código: C++
  1. bool orderCarsByPlate(Car *c1, Car *c2)
  2. {
  3.     return c1->plate < c2->plate;
  4. }
  5.  
  6. vector<Car *> orderCarsByPlates(vector<Car *> cars)
  7. {
  8.  
  9. for ( int i=0; i < cars.size(); i++)
  10. plate= (cars[i]->getPlate());
  11. vector <string> plate (plate);
  12. vector<int>::iterator it;
  13. sort (cars.begin(),cars.begin()+2);
  14. sort (cars.begin()+2,cars.end(),orderCarsByPlates);
  15. sort (cars.begin(),cars.end(),orderCarsByPlates);
  16.  
  17. for (it=cars.begin(); it!=cars.end(); ++it){
  18. it= cars;
  19.  
  20.  
  21. return cars;
  22.  
  23.  

si no es asi, copia tu  codigo y me lo enseñas...a ver como ta kedao a ti...luego lo pruebo en casa y te comento que hasta las 23:30 no llegare a casa

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #20 en: Martes 7 de Abril de 2009, 21:05 »
0
No, esa funcion (vector<Car *> orderCarsByPlates(vector<Car *> cars)) es totalmente innecesaria.

Agregas una nueva funcion: bool orderCarsByPlate(Car *c1, Car *c2);

Y desde el main llamas a sort asi como te puse antes:
Código: Text
  1. // Let's print to the console all the cars in the list
  2. cout << listCars(cars) << endl;
  3.  
  4. sort(cars.begin(), cars.end(), orderCarsByPlate);
  5.  
  6. cout << listCars(cars) << endl;
  7.  

La segunda impresion en pantalla estara ordenada por patente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #21 en: Martes 7 de Abril de 2009, 21:10 »
0
Entonces todo lo que hecho ha sido una tonteria XDD??....Lo has solucionado todo con una linea o_O...pensaba que lo mio era necesario XDDDD. Es que aun no lo he probado, luego lo pruebo y comento.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #22 en: Martes 7 de Abril de 2009, 21:23 »
0
Si, eso estaba mal, igual son 4 lineas no una, la funcion de comparacion tambien es necesaria:

Código: Text
  1. bool orderCarsByPlate(Car *c1, Car *c2)
  2. {
  3.   return c1->plate < c2->plate;
  4. }
  5.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Como crear una lista
« Respuesta #23 en: Martes 7 de Abril de 2009, 23:52 »
0
eres dios....eres el puto amo....me funciona a la perfeccion...muxisimas gracias tio...kreo k me asomare mas por el foro pk merece la pena :) estar aqui.

No entendia muy bien lo de sort...pero gracias a ti y a mi profe ya lo entiendo :) es muy util la verdad

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Como crear una lista
« Respuesta #24 en: Miércoles 8 de Abril de 2009, 08:08 »
0
De nadas  B) Ese sort es un algoritmo de la STL, estan para simplificar la vida del programador de C++  :beer:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.