[STL] Wie Funktion bei for_each mehr Parameter übergeben?

hehejo

hehejo

blöder Purist
Hallo,
hier ein kurzer Umriß meines Problems:

PHP:
#include <iostream>
#include <string>
using namespace std;

void ausgabe(const string&, const string sTrenner="\n");
 
int main() {
  vector<string> box;
  box.push_back("hoho");
  box.push_back("haha");
  box.push_back("hihi");
  box.push_back("hehe");

  for_each(box.begin(), box.end(), ausgabe);
  // FEHLER
  for_each(box.begin(), box.end(), ausgabe("\t"));
  // FEHLER
}

void ausgabe(const string& s, const string sTrenner="\n") {
  cout << s.c_str() << sTrenner.c_str();
}

Wie muss ich es schreiben, damit for_each mit den weiteren Parametern von ausgabe klarkommt?
 
hehejo schrieb:
Wie muss ich es schreiben, damit for_each mit den weiteren Parametern von ausgabe klarkommt?

das geht nicht.
du brauchst für jedes Vorhaben eine Funktion

PHP:
void ausgabe(const string& s, const string sTrenner="\t")
{
  cout << s  << sTrenner;
} 
 
void ausgabe2(const string& s)
{
  cout << s  << endl;
} 

int main() { 
  vector<string> box; 
  box.push_back("hoho"); 
  box.push_back("haha"); 
  box.push_back("hihi"); 
  box.push_back("hehe"); 
  
  for_each(box.begin(), box.end(), ausgabe); 
  for_each(box.begin(), box.end(), ausgabe2);
}
 
NATÜRLICH geht das!

PHP:
#include <iostream>
#include <string>
using namespace std;

class ausgabe {
private:
  string m_delim;

public:
  ausgabe( const string & delim = "\t" ) : m_delim( delim ) {}
  virtual ~ausgabe( void ) {}

  void operator () ( const string & str ) {
    // wozu das .c_str()?
    cout << str << m_delim;
  }
};

int main() {
  vector<string> box;
  box.push_back("hoho");
  box.push_back("haha");
  box.push_back("hihi");
  box.push_back("hehe");

  for_each(box.begin(), box.end(), ausgabe);
  for_each(box.begin(), box.end(), ausgabe("\t"));

  return 0;
}

Nur noch eins: es gibt output iteratoren die das machen können, ohne das du dir ne Klasse schreiben musst:
PHP:
#include <iostream>
#include <string>
#include <iterator> // für ostream_iterator
#include <algorithm> // für copy

using namespace std;

int main() {
  vector<string> box;
  
  box.push_back("hoho");
  box.push_back("haha");
  box.push_back("hihi");
  box.push_back("hehe");

  copy( box.begin(), box.end(), ostream_iterator( cout, "\t" ) );

  return 0;
}
Tja, in der STL ist für fast alles schon ne Klasse vorhanden. ;)
 

Ähnliche Themen

String auf Konsole ausgeben

Funktion nicht gefunden

Problem mit Texteingabe

deprecated conversion from string constant to ‘char*’

g++ kompilieren schlägt fehl

Zurück
Oben