Saya menggunakan g++ di CodeBlocks IDE di Ubuntu. Saya baru mengenal STL dan beberapa bagian dari C++.
Q1: //dijawab
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 ) );
benar, tetapi ketika saya berubah
std::istream_iterator< std::string > end;
ke dalam
std::istream_iterator< std::string > end();
kompiler mengatakan tidak ada pemanggilan fungsi yang cocok di baris keempat.
Q2: //maaf saya tidak menjelaskan masalahnya pada kali pertama
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;
Perhatikan bahwa satu-satunya perbedaan antara firstLess1 dan firstLess2 adalah firstLess1 dideklarasikan di PS.
ketika saya memanggil fungsi:
k = std::find_if ( j + 1, finis, std::not1 ( std::bind1st ( PS::firstLess1, *j ) ) );
kompiler memberi saya kesalahan 'referensi tidak terdefinisi ke PS::firstLess1'. dan kemudian saya berubah menjadi
k = std::find_if ( j + 1, finis, std::not1 ( std::bind1st ( firstLess2, *j ) ) );
kemudian melewati kompilasi.
Yang lebih aneh lagi, di beberapa bagian lain dari program ini, saya menggunakan keduanya
j = std::adjacent_find ( j , finis, PS::firstLess1 );
j = std::adjacent_find ( j , finis, firstLess2 );
dan kompiler tidak memberi saya kesalahan.