PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Doppelte aus einem stl-container entfernen



axeljaeger
12-08-2003, 13:59
Ich muss doppelte Elemente aus einem stl::vector löschen und wollte das ganze erstmal in einem kleinen Beispiel testen. Das Beispiel stammt so fast 1 zu 1 aus einem Buch, aber beim kompilieren bekomme ich ganz abenteuerliche Fehlermeldungen:



#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

template<class T>
void Anzeige(const T& x) { cout << x << endl;}


int main(int argc, char ** argv)
{
vector<int> v;

v.push_back(1);
v.push_back(2);
v.push_back(2);
v.push_back(3);
v.push_back(1);
v.push_back(3);

sort(v.begin(), v.end());

for_each(v.begin(), v.end(), Anzeige);

cout << "Ohne doppelte" << endl;
v.unique();
for_each(v.begin(), v.end(), Anzeige);


return 0;
}

wraith
12-08-2003, 14:08
1.unique ist keine Memberfunktion.
2.unique entfernt die Element noch nicht,sondern ordnet sie ans Ende
3.Das Standardidiom zur Ausgabe benutzt copy


#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>

using namespace std;

int main(int argc, char ** argv)
{
vector<int> v;

v.push_back(1);
v.push_back(2);
v.push_back(2);
v.push_back(3);
v.push_back(1);
v.push_back(3);

sort(v.begin(), v.end());

copy(v.begin(),v.end(),ostream_iterator<int>(cout,"\n"));

cout << "Ohne doppelte" << endl;
v.erase(unique(v.begin(),v.end()),v.end());

copy(v.begin(),v.end(),ostream_iterator<int>(cout,"\n"));

return 0;
}



und noch zu deiner for_each,Anzeige ist eine Template Funktion,also


for_each(v.begin(),v.end(),::Anzeige<int>);