Я использую g++ в IDE CodeBlocks в Ubuntu. Я новичок в STL и некоторых частях C++.
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: //извините, я не объяснил проблему в первый раз
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;
Обратите внимание, что единственная разница между firstLess1 и firstLess2 заключается в том, что firstLess1 объявлен в PS.
когда я вызываю функцию:
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 );
и компилятор не выдал мне ошибку.