Bobik4556Ttft
@Bobik4556Ttft
Тот ещё Мухтар

Почему к итератору не прибавляется единица?

Хочу воспользоваться методом assign(iterBegin, iterEnd), но не получается, потому что почему-то к итератору не прибавляется единица.
forward_list<int> list9 = {465, -54, 0, 456};
forward_list<int> value = {464, -962, -30, -465};
forward_list<int>::iterator begin = value.begin() + 1;
forward_list<int>::iterator  end = value.end();
list9.assign(begin, end);
cout << "List9 = ";
for(forward_list<int>::iterator iter = list9.begin(); iter != list9.end() ;iter++)
     cout << *iter << "\t";
cout << endl;

/usr/include/c++/10/bits/basic_string.h:6161:5: note:   template argument deduction/substitution failed:
ForwardList.cpp:76:54: note:   ‘std::forward_list<int>::iterator’ {aka ‘std::_Fwd_list_base<int, std::allocator<int> >::iterator’} is not derived from ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>’
   76 |  forward_list<int>::iterator begin = value.begin() + 1;
      |                                                      ^

Почему там написано, что не является производным к char, если итератор int?
Но вот если инкрементировать, то всё работает нормально. К итератору ведь можно прибавлять числа, это операция должна ведь возвратить итератор, указывающий на позицию в контейнере правее на один.
forward_list<int> list9 = {-964, 132, 30, -566};
forward_list<int> value = {464, -962, -30, -465};
forward_list<int>::iterator begin = ++value.begin();
forward_list<int>::iterator end = value.end();
list9.assign(begin, end);
cout << "List9 = ";
for(forward_list<int>::iterator iter = list9.begin(); iter != list9.end() ;iter++)
    cout << *iter << "\t";
cout << endl;

вывод
List9 = -962 -30 -465
  • Вопрос задан
  • 97 просмотров
Решения вопроса 2
Adamos
@Adamos
Итератор std::list - не итератор произвольного доступа, у него нет возможности перескочить несколько элементов, реализован только переход к предыдущему и следующему. Поэтому инкремент для него существует, а сложение - нет, и библиотека начинает искать по сусекам, к чему бы, реализующему сложение, его привести.
К счастью, не находит ничего подходящего ;)
Ответ написан
Комментировать
Птому что для данного итератора не определен оператор +. Используйте std::next или оператор ++
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы