Re[7]: Можно ли и как канонично получить из итератора тип эл
От: B0FEE664  
Дата: 22.04.25 15:33
Оценка: -1 :)
Здравствуйте, rg45, Вы писали:

BFE>>Изменение по месту я понимаю так:

BFE>>
BFE>>*it = 'a';
BFE>>*it = 'b';
BFE>>

BFE>>результат: "...b...", а не "...ab...".

R>К результату "ab" могут привести, разве что, только такие особые виды итераторов, как back_insert_iterator и ostream_iterator. Но даже у этих операторов существует операция инкремента (просто она пустая).

  вот именно
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
 
int main()
{
    std::vector<char> v;
    
    std::back_insert_iterator<std::vector<char>> it(v);
    
    *it = 'a';
    *it = 'b';
 
    for (auto n : v)
        std::cout << n << ' ';
    std::cout << '\n';
}

вывод a b

https://coliru.stacked-crooked.com/a/21f80d6127889c39

R>В самом же общем случае итератор является обобщением указателя и для того, чтобы получить последовательность ("ab"), итератор нужно инкрементить. Что и делают алгоритмы тип std::copy, std::fill, etc. А без этого инкремента это и будет многократное изменение одного и того же элемента (изменение по месту, как ты это называешь).
Кстати, что насчёт std::reverse ? Ему двунаправленные итераторы надобны.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.