Почему я не могу эффективно перемещать строки при использовании std :: istream_iterator ?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему я не могу эффективно перемещать строки при использовании std :: istream_iterator ?

Сообщение Anonymous »

Код: Выделить всё

#include 
#include 
#include 

int main() {
auto fin  = std::ifstream("tmp.txt");
auto pos  = std::istream_iterator(fin);
auto last = std::istream_iterator{};
auto strs = std::vector{};

for (; pos != last; ++pos) {
// Always COPY rather than MOVE the string here!
strs.emplace_back(std::move(*pos));
}
}
Обратите внимание, что strs.emplace_back (std :: move (*pos)) всегда будет copy , а не move строка, даже если std :: move (*pos) .
Это STD :: aStream_iteRATU Следует: < /p>

const t & operator*() const; < /p>
< /blockquote>
Что означает, что мы не можем перемещать кэшированные объекты, даже если итератор является одноэтатным! /> t & operator*() const; < /p>
< /blockquote>
Тогда мы могли бы < /p>


использовать std :: istream_iterator < /cod> если мы уверены, чтобы переместить каждую строку, один раз, < /br /li std :: istream_iterator Если мы будем ссылаться на один и тот же итератор более одного раза. Какое обоснование решения?

Подробнее здесь: https://stackoverflow.com/questions/797 ... teratorstd
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»