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. |