Проблема при копировании с помощью copy()
Объявление:
copy(it, it, back_inserter(sell_medic));
Где it:
list<Medicine>::iterator it = medic.begin();
advance(it, id - 1);
Метод вообще не копирует в нужный list <Medicine> sell_medic;
В алгоритмах стандартной библиотеки пара итераторов представляет диапазон - [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()
Если вам так уж хочется использовать стандартный алгоритм, то можно так:
copy_n(it, 1, back_inserter(sell_medic));
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
1) Насколько я знаю, static_cast<> создает копию переменной но уже в другом форматеВот код
Подскажите можно ли как-то записать в 1 строчку следующий код: