Ich verwende g ++ in CodeBlocks IDE in Ubuntu. Ich bin neu in STL und ein Teil von C++.Einige Probleme beim Lernen von STL
Q1: // beantwortete
std::istream_iterator<std::string> begin (dictionaryFile);
std::istream_iterator<std::string> end;
std::vector< std::string> dictionary;
std::copy (begin, end, std::back_inserter (dictionary));
richtig ist, aber wenn ich geändert
std::istream_iterator<std::string> end;
in
std::istream_iterator<std::string> end();
der Compiler sagt keinen passenden Funktionsaufruf in der vierten Zeile.
Q2: // sorry ich nicht geschafft haben klar das Problem das erste Mal
struct PS : std::pair< std::string, std::string > {
PS();
static struct FirstLess: std::binary_function< PS, PS, bool> {
bool operator() (const PS & p, const PS & q) const {
return p.first < q.first;
}
} firstLess1; };
struct FirstLess: std::binary_function< PS, PS, bool> {
bool operator() (const PS & p, const PS & q) const {
return p.first < q.first;
}} firstLess2;
Beachten Sie, dass der einzige Unterschied zwischen firstLess1 und firstLess2 ist, dass firstLess1 in PS deklariert wird.
, wenn ich die Funktion aufrufen:
k = std::find_if (j + 1, finis, std::not1 (std::bind1st (PS::firstLess1, *j)));
der Compiler gab mir einen Fehler 'undefined reference to PS :: firstLess1'. und dann wechselte ich zu
k = std::find_if (j + 1, finis, std::not1 (std::bind1st (firstLess2, *j)));
dann übergeben sie die Kompilierung.
Mehr seltsam, in einem anderen Teil des Programms verwenden ich sowohl
j = std::adjacent_find (j , finis, PS::firstLess1);
j = std::adjacent_find (j , finis, firstLess2);
und die Compiler hat gab mir keinen Fehler.
OK. Ich habe herausgefunden, wie ich die zweite Frage lösen kann (aber ich weiß immer noch nicht warum) benutze einfach k = std :: find_if (j + 1, finis, std :: nicht1 (std :: bind1st (PS :: FirstLess(), * j))); ist OK oder Sie können const PS :: FirstEqual PS :: ersteEqual1 = PS :: FirstEqual(); nach der Erklärung. – user522829