Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Vector-Element entfernen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.10.2007, 12:22 Uhr
Lensflare



Hallo

ich möchte ein beliebiges Element aus einem Vektor löschen können und weiss nicht wie ich das am besten mache.

Ich habe folgendes probiert:


C++:
#include <iostream>
#include <vector>

using namespace std;

class Item
{
public:
    Item(int i) { n = i; };
    int n;
};

int main()
{
    Item* item1 = new Item(1);
    Item* item2 = new Item(2);
    Item* item3 = new Item(3);
    
    vector<Item*> item_vector;
    
    //alle einfügen
    item_vector.push_back(item1);
    item_vector.push_back(item2);
    item_vector.push_back(item3);
    
    //item3 löschen
    vector<Item*>::iterator iter;
    for(iter = item_vector.begin(); iter != item_vector.end(); iter++)
    {
        if(*iter == item3)
        {
          item_vector.erase(iter);
        }
        
    }
      
    //ausgeben
    for(int i=0; i<item_vector.size(); i++)
    {
        cout << item_vector.at(i)->n << "\n";
    }

    getchar();
}



item1 und item2 werden ohne probleme gelöscht, aber beim Löschen von item3 (also immer das letzte item) stürzt das Programm ab.
Weiss jemand warum?
Kann man das anders/besser machen?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.10.2007, 14:16 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Es geht nur um das letzte Element, oder?

C++:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

int main(int argc, char* argv[])
{
    std::vector<std::string> vec;
    vec.push_back("test1");
    vec.push_back("test2");
    vec.push_back("test3");
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    vec.erase(vec.end());
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    return EXIT_SUCCESS;
}

--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.10.2007, 14:28 Uhr
Lensflare



Ne, es kann das letzte sein, muss aber nicht.
Ich lege in beliebiger Reihenfolge Items in den Vector und dann will ich ein bestimmtes Item rauslöschen. Ich weiss aber nicht an welcher Stelle dieses Item ist, deswegen muss ich mit der Schleife danach suchen. (Es sei denn es gibt einen anderen Weg)
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.10.2007, 15:13 Uhr
Tron



Moin,

wie wäre es mit:
item_vector.erase(find(item_vector.begin(), item_vector.end(), item3));
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.10.2007, 15:17 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Na ja, find verwenden?!

C++:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>

int main(int argc, char* argv[])
{
    std::vector<std::string> vec;
    vec.push_back("test1");
    vec.push_back("test2");
    vec.push_back("test3");
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    vec.erase(std::find(vec.begin(), vec.end(), "test3"));
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    return EXIT_SUCCESS;
}

--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.10.2007, 15:46 Uhr
Lensflare



ah, das ist das, wonach ich gesucht habe.
Danke.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: