на «для передачи ссылок на шаблоны функций (алгоритмы), которые обычно принимают копии своих аргументов», например так:

гая тема Я пытался решитьэто проблема. Проблема заключалась в удалении повторяющихся символов изТак как порядок был не важен, поэтому я отсортировалstd::string.

std::string s= "saaangeetha";

 сначала, а потом использовалs и, наконец, изменил размер, чтобы получитьstd::uniqueжелаемый результатЭто верно!:

aeghnst

Теперь я хочу сделать то же самое, но в то же время я хочу, чтобы порядок символов не изменился. Значит, я хочу этот вывод:

Так я написала

sangeth

этоЧто дает этот вывод::

template<typename T>
struct is_repeated
{
    std::set<T>  unique;
    bool operator()(T c) { return !unique.insert(c).second; }
}; 
int main() {
    std::string s= "saaangeetha";
    s.erase(std::remove_if(s.begin(), s.end(), is_repeated<char>()), s.end()); 
    std::cout << s ;
}

Это,

saangeth

 повторяется, хотя другие повторения пропали. Что не так с кодом?aТем не менее, я

изменить мой код немного: (см. комментарий)Выход:

template<typename T>
struct is_repeated
{
    std::set<T> & unique;  //made reference!
    is_repeated(std::set<T> &s) : unique(s) {} //added line!
    bool operator()(T c) { return !unique.insert(c).second; }
}; 
int main() {
    std::string s= "saaangeetha";
    std::set<char> set; //added line!
    s.erase(std::remove_if(s.begin(),s.end(),is_repeated<char>(set)),s.end()); 
    std::cout << s ;
}

Проблема ушла!

sangeth

Так что же не так с первым решением?

Кроме того, если я не сделаю переменную-член

 тип ссылки, тогдаuniqueпроблема не идетЧто не так с.

 или жеstd::set функтор? Где именно проблема?is_repeatedЯ также отмечаю, что если

 Функтор куда-то копируется, затем копируется каждый его член. Я не вижу здесь проблемы!is_repeatedКроме того, сортировка данных O (N log N). Существует гораздо более эффективный алгоритм для этого. Сделайте линейный проход строки, считая вхождения каждого символа. Сделайте второй проход строки и выведите ее, только если счетчик равен 1. Это O (N).

Ответы на вопрос(7)

Ваш ответ на вопрос