stl copy c++ проблема копирования

123
18 августа 2019, 04:20

Проблема при копировании с помощью copy() Объявление:

copy(it, it, back_inserter(sell_medic));

Где it:

list<Medicine>::iterator it = medic.begin();
advance(it, id - 1);

Метод вообще не копирует в нужный list <Medicine> sell_medic;

Answer 1

В алгоритмах стандартной библиотеки пара итераторов представляет диапазон - [begin, end[ (end указывает на элемент за последним), поэтому диапазон it, it будет всегда представлять пустое множество. Если вы хотели скопировать с начала до it (но не включая элемент, на который it указывает) то код должен быть:

copy(medic.begin(), it, back_inserter(sell_medic));

А если мне надо скопировать конкретный элемент, на который указывает этот итератор?

Тогда вам вообще не нужен std::copy:

sell_medic.push_back( *it );

но если сильно хочется:

std::copy(it, std::next(it), std::back_inserter(sell_medic));

ЗЫ этот код излишне многословен:

list<Medicine>::iterator it = medic.begin();
advance(it, id - 1);

проще написать так:

auto it = std::next( medic.begin(), id - 1 );

так и проще читать и короче std::next()

Answer 2

Если вам так уж хочется использовать стандартный алгоритм, то можно так:

copy_n(it, 1, back_inserter(sell_medic));
READ ALSO
Передача функции ссылку переменной. static_cast&lt;&gt;. C++

Передача функции ссылку переменной. static_cast<>. C++

1) Насколько я знаю, static_cast<> создает копию переменной но уже в другом форматеВот код

123
Что такое *this?

Что такое *this?

Возвращаю *thisА что такое *this

128
Вывод в поток данных при выполнении условий (использование тернарной операции)

Вывод в поток данных при выполнении условий (использование тернарной операции)

Подскажите можно ли как-то записать в 1 строчку следующий код:

116
Как работает union? [дубликат]

Как работает union? [дубликат]

На данный вопрос уже ответили:

134