Здравствуйте, 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 ? Ему двунаправленные итераторы надобны.