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

[C++] Usuwanie elementu z wektora struktur

Ostatnio zmodyfikowano 2020-05-05 22:54
Autor Wiadomość
Biedrzyk
Temat założony przez niniejszego użytkownika
[C++] Usuwanie elementu z wektora struktur
» 2020-05-05 21:37:12
Witam,
stworzyłem w programie książka adresowa funkcję usuń adresata. Z racji tego,że imiona czy nazwiska mogą się powtarzać ustawiłem opcję usuwania osoby przez wyszukiwanie po numerze telefonu. W założeniu chodziło mi o to,żeby po wpisaniu numeru telefonu program znalazł daną osobę, usunął ją z wektora, a pozostałe wpisy zapisał z powrotem do pliku (nadpisał istniejące wpisy). Podaję kod funkcji:
C/C++
void usunAdresata( vector < Adresat > & adresaci, int iloscAdresatow )
{
    string numer;
    cin >> numer;
   
    for( int i = 0; i < iloscAdresatow; i++ )
    {
        if( adresaci[ i ].nr_tel == numer )
        {
            cout << "Usuwasz ";
            cout << adresaci[ i ].id << ".";
            cout << adresaci[ i ].nazwisko << " ";
            cout << adresaci[ i ].imie << " ";
            cout << adresaci[ i ].nr_tel << " ";
            cout << adresaci[ i ].email << " ";
            cout << adresaci[ i ].adres << " ";
            cout << "ze swojej listy znajomych. ";
            cout << endl;
            adresaci.erase( adresaci.begin() +( adresaci[ i ].nr_tel == numer ) );
        }
    }
   
    for( int i = 0; i < iloscAdresatow; i++ )
    {
        cout << adresaci[ i ].id << ".";
        cout << adresaci[ i ].nazwisko << " ";
        cout << adresaci[ i ].imie << " ";
        cout << adresaci[ i ].nr_tel << " ";
        cout << adresaci[ i ].email << " ";
        cout << adresaci[ i ].adres << " ";
        cout << endl;
    }
    fstream plik;
    plik.open( "KsiazkaAdresowa.txt", ios::out );
    if( plik.good() )
    {
        plik << adresaci[ iloscAdresatow ].id << "|";
        plik << adresaci[ iloscAdresatow ].imie << "|";
        plik << adresaci[ iloscAdresatow ].nazwisko << "|";
        plik << adresaci[ iloscAdresatow ].nr_tel << "|";
        plik << adresaci[ iloscAdresatow ].email << "|";
        plik << adresaci[ iloscAdresatow ].adres << "|";
        plik << endl;
        plik.close();
    }
    system( "pause" );
}
drugą pętlę dodałem na czas testów żeby sprawdzić czy usuwanie działa - co ciekawe usuwa zawsze drugą osobę ale przy wyświetlaniu kopiuje następną na jej miejsce. Jak dobrze usunąć taką osobę a potem wpisać pozostałe elementy wektora do pliku? Mógłby mi to ktoś objaśnić? Z góry dziękuję :) 
P-176825
pekfos
» 2020-05-05 22:54:03
C/C++
adresaci.erase( adresaci.begin() +( adresaci[ i ].nr_tel == numer ) );
Ten warunek nie ma tu żadnego sensu.
P-176829
« 1 »
  Strona 1 z 1