私はUbuntuのCodeBlocks IDEでg ++を使用しています。 私はSTLとC++の新機能です。STLの学習中のいくつかの問題
Q1://は
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));
に答えは正しいですが、私は
std::istream_iterator<std::string> end();
に
std::istream_iterator<std::string> end;
を変更したときに、コンパイラは、第四行で一致する関数呼び出しを述べていません。
Q2://申し訳ありませんが私はfirstLess1とfirstLess2間の唯一の違いはfirstLess1はPSで宣言されていることであるという問題が最初に
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;
注意をクリアすることはありませんでした。
私は関数を呼び出す:
k = std::find_if (j + 1, finis, std::not1 (std::bind1st (PS::firstLess1, *j)));
コンパイラは私にエラー 'PS :: firstLess1に未定義の参照' を与えました。 と変更してから
k = std::find_if (j + 1, finis, std::not1 (std::bind1st (firstLess2, *j)));
に変更しました。
もっと奇妙な、プログラムの他の部分では、私は両方の
j = std::adjacent_find (j , finis, PS::firstLess1);
j = std::adjacent_find (j , finis, firstLess2);
を使用し、コンパイラは私にエラーを与えていませんでした。
OK。私は2番目の質問を解決する方法を考え出しました(しかし、まだわからない) k = std :: find_if(j + 1、finis、std :: not1(std :: bind1st(PS :: FirstLess()、* j))); OK か、const PS :: FirstEqual PS :: firstEqual1 = PS :: FirstEqual()を追加できます。宣言の後に。 – user522829