C ++ primer 5 издание. переместить итераторы - PullRequest
1 голос
/ 23 февраля 2020

Я читаю учебник по С ++ 5 изд. Я читаю это так внимательно, потому что это действительно полезно. Я также слишком много практикую из того, что я узнал из этого. Сейчас я в главе 13. Переместить семантику. переместить итераторы. все ясно, пока я не дошел до этого абзаца:

Стоит отметить, что стандартная библиотека не дает никаких гарантий относительно того, какие алгоритмы могут использоваться с итераторами перемещения, а какие нет. Поскольку перемещение объекта может стереть источник, вы должны передавать итераторы перемещения в алгоритмы только в том случае, если уверены, что алгоритм не обращается к элементу после того, как он назначен этому элементу или передал этот элемент пользовательской функции.

Может кто-нибудь объяснить мне этот абзац? Я не понял, «вы должны передавать итераторы перемещения в алгоритмы только в том случае, если уверены, что алгоритм не обращается к элементу после того, как он назначен этому элементу или передал этот элемент пользовательской функции». ?? о каком элементе он говорит? Спасибо, ребята!

EG:

    std::vector<int> vi{5, 7, 10, 24}, vi2;
        std::copy(std::make_move_iterator(std::begin(vi)), std::make_move_iterator(std::end(vi)), std::back_inserter(vi2));
        std::copy(vi2.cbegin(), vi2.cend(), std::ostream_iterator<int>(std::cout, ", "));

Означает ли это, что copy не должен обращаться к элементам vi?

...