C Primer 5-й на стр.343. что не соответствует c.insert(p,b,e)

#c #string #c 11

#c #строка #c 11

Вопрос:

Есть проблема, которую я не могу понять. Посмотрите на картинку следующим образом:

введите описание изображения здесь

 #include <iostream>
#include<string>
using namespace std;


// use the string rep to replace the value in string str

void Replace(stringamp; str,const charamp; value,const stringamp; rep)

{

    auto iter = str.begin();

    while(iter != str.end())
    {
        if(*iter == value)

        {
            iter = str.erase(iter);

            iter = str.insert(iter,rep.begin(),rep.end());

            iter  = rep.size();

            continue;

        }

          iter;

    }

}

int main()

{

    string str = "Welcome to Stack Overflow";

    Replace(str,' ',"****");

    cout<<str<<endl;

    return 0;

}
 

GCC 4.9(C 11)

Сообщения компилятора:

 main.cpp: In function 'void Replace(std::stringamp;, const charamp;, const stringamp;)':
main.cpp:14:18: error: no match for 'operator=' (operand types are '__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >' and 'void')
         iter = str.insert(iter,rep.begin(),rep.end());
 

но..Я не могу найти функцию, нарисованную над изображением в cppreference.
http://en.cppreference.com/w/cpp/string/basic_string/insert

итак: Пожалуйста, скажите мне, я сказал неправильно?? и тогда как мне это подогнать ?

Комментарии:

1. Как вы компилируете? Включен ли у вас C 11?

2. да, в дополнение к запуску его в моем компиляторе (CodeBlock 16.1, скомпилированный C 11). Я пробую это на сайтах cppreference, используя GCC 4.9 (C 11).

3. Не может размножаться . Похоже, у вас действительно не включен C 11, поскольку вызываемая вами функция возвращает void значения перед C 11 и a iterator в C 11 и выше.

4. Я не могу найти соответствующую функцию insert, возвращающую итератор в C 11. как ты его находишь? где? Я уверен, что я уже использовал компилятор C 11, который попробовал несколько раз. Вы запустили его без ошибок??

5. Он указан в ссылке на cppreference в вашем вопросе. см. Перегрузка 8. Это было void insert( iterator pos, InputIt first, InputIt last ); до C 11, и теперь это iterator insert( const_iterator pos, InputIt first, InputIt last );