Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » [hilfe] doppelte werte aus Array loeschen

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 ] > 2 <
010
18.09.2006, 15:49 Uhr
0xdeadbeef
Gott
(Operator)


*Seufz* Also gut, was solls.

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

int main() {
  std::vector<std::string> v, v2;

  v.push_back("foo");
  v.push_back("foo");
  v.push_back("foo");
  v.push_back("bar");
  v.push_back("baz");
  v.push_back("baz");
  v.push_back("foo");
  
  std::unique_copy(v.begin(), v.end(), std::back_inserter(v2));

  std::copy(v.begin(),
            v.end(),
            std::ostream_iterator<std::string>(std::cout, " "));
  std::cout << std::endl;

  std::copy(v2.begin(),
            v2.end(),
            std::ostream_iterator<std::string>(std::cout, " "));
  std::cout << std::endl;
}



Bearbeitung von 0xdeadbeef:

Bisschen übersichtlicher formatiert


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 18.09.2006 um 15:56 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
18.09.2006, 15:55 Uhr
stephanw
localhorst


Entfernt unique_copy nicht nur benachbarte Duplikate ? Evtl. ist das nicht ganz das, was man davon erwartet.
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
18.09.2006, 15:59 Uhr
0xdeadbeef
Gott
(Operator)


Wenns um alle geht, ists ja noch einfacher - einfach in ein std::set schmeißen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
18.09.2006, 16:21 Uhr
stephanw
localhorst


Ja, klar. Ich wollte es nur anmerken. Und wenn der Programmierer krank ist und die Firma dann vor die Wand läuft, dann stimmt da was nicht ( entweder die Firma oder die Termin-Planung).
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
18.09.2006, 16:28 Uhr
fabo-erc



aa danke!

herzlichen dank an alle die sich mit meinem problem auseinander gesetzt haben!!!

-fabo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
18.09.2006, 16:53 Uhr
(un)wissender
Niveauwart


Na denn kommt von mir auch eine Lösung, die vollständig sein sollte.


C++:
#include <functional>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>

template<class inIter, class outIter, class pred>
outIter copy_if(inIter begin, inIter end, outIter dest, pred p);

class Counter
    : public std::unary_function<int, bool>
{
public:
    Counter( std::vector<int> const& vec)
        : _vec(vec) {}
        
    bool operator()(int v) const
    {
        return std::count(_vec.begin(), _vec.end(), v) < 2;
    }    
  
private:
    std::vector<int> const& _vec;
};    

int main()
{
    std::vector<int> buffer(
        (std::istream_iterator<int>(std::cin)),
        std::istream_iterator<int>());    
    std::cout << "Eingabe:\n";
    std::copy(buffer.begin(), buffer.end(),
        std::ostream_iterator<int>(std::cout, " "));
    std::vector<int> newBuffer(buffer);
    std::fill(
        copy_if(buffer.begin(), buffer.end(),
            newBuffer.begin(),
            Counter(buffer)),                                              
        newBuffer.end(), 0);
    std::cout << "\nBearbeitung:\n";
    std::copy(newBuffer.begin(), newBuffer.end(),
        std::ostream_iterator<int>(std::cout, " "));
}

template<class inIter, class outIter, class pred>
outIter copy_if(inIter begin, inIter end, outIter dest, pred p)
{
     while(begin != end)
    {
        if(p(*begin))
        {
            *dest = *begin;
            ++dest;
        }    
        ++begin;
    }
    return dest;
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: