Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Problem z foreach w listach

Ostatnio zmodyfikowano 2013-01-17 09:09
Autor Wiadomość
tmk29121992
Temat założony przez niniejszego użytkownika
[C++] Problem z foreach w listach
» 2013-01-16 22:17:45
Witam,
w trakcie pisanie zaciąłem się na klasie Ewidencja a dokładnie na znajdującym się w niej for each'u i nie bardzo wiem jak go rozwiązać. Chcę żeby została przeszukana cała lista w poszukiwaniu samochodów czteroosobowych a mi wywala błąd dla EW i nie mam pojęcia dlaczego. Wie ktoś może jak temu zaradzić? Wiem że w C# można tak używać foreach ale nie mam zielonego pojęcia czy jest to dozwolone w C++

C/C++
#include <iostream>
#include <string>
#include <list>
using namespace std;

class Samochod {
public:
    int rok_produkcji;
    string marka;
    Samochod()
        : rok_produkcji( NULL )
        , marka( NULL )
    { }
    Samochod( int rp, string m )
        : rok_produkcji( rp )
        , marka( m )
    { }
};

class Osobowy
    : public Samochod
{
private:
   
public:
    int liczba_osob;
    Osobowy()
        : liczba_osob( 0 )
    { }
    Osobowy( int rp, string m, int ls )
        : Samochod( rp, m )
        , liczba_osob( ls )
    { }
};

class Ewidencja {
private:
   
public:
    Osobowy * X;
    list < Samochod > EW;
    Ewidencja() { }
    void pusty() {
        EW.clear();
    }
    void dopisz( Samochod S ) {
        EW.push_back( S );
    }
    void usun() {
        EW.pop_back();
    }
   
    int cztero() {
        int suma;
        for each( Samochod S in EW ) {
            if( X->liczba_osob == 4 )
                 suma++;
           
            return suma;
        }
    }
};
P-74160
Admixior
» 2013-01-17 01:21:02
Używanie for each nie tyle jest niedozwolone, co w ogóle takiego czegoś nie ma. (W C++11 jest chyba foreach ale jak dokładnie działa nie wiem).
Klasa vectora zawiera w sobie taką funkcję http://www.cplusplus.com/reference/algorithm/for_each/.
Jeśli twój kompilator używa c++11 to możesz wysłać funkcje lambda  //wręcz idealnie się do takiego celu przyda
C/C++
myvector.for_each(
myvector.begin(),
myvector.end(),
[ & suma ]( vector < blabla >& obj )->void { if( obj.liczba_osob == 4 ) suma++; }
);

Ewentualnie jesteś zmuszony do pętli for(;;)
P-74170
DejaVu
» 2013-01-17 09:09:28
Jest pętla foreach, ale od standardu C++11.

C/C++
std::vector < int > vKontener;
//...
for( auto & element: vKontener )
{
    //...
} //for
P-74174
« 1 »
  Strona 1 z 1