например:
int original_range[] = {1, 2, 3, 4, 5, 6, 7};
int copy_here[7];
std::partition_copy(std::begin(original_range), std::end(original_range),
std::begin(original_range), std::begin(copy_here),
[](int val) { return val >= 4; });
Я ожидаю здесь: original_range = {4, 5, 6, 7, 5, 6, 7} и copy_here = {1, 2, 3, 0, 0, 0, 0}
вы можете предположить, что значения мусора, хранящиеся в copy_here, равны 0.
Обратите внимание, что только ОП может в конечном итоге подтвердить, решит ли цель обмана их проблему или нет. Пользователи, у которых нет соответствующих золотых значков для одностороннего закрытия/повторного открытия сообщения, могут отредактировать сообщение для ясности, но не вставляя слов в уста ОП. Замечания о применимости дюпов лучше всего подходят для комментариев. Замечания о самом процессе редактирования никуда не годятся. Пожалуйста, не откатывайтесь снова, иначе мне придется заблокировать сообщение. Если пост недостаточно ясен/воспроизводим, чтобы определить применимость целей дублирования, его можно закрыть как неясный.
Отвечает ли это на ваш вопрос? std::unique_copy с перекрывающимися диапазонами и unique_copy с перекрывающимися диапазонами





Ваш код вызывает UB (Undefine Behavior), и поэтому может случиться что угодно.
из документации std::partition_copy:
Среди входного диапазона и двух выходных диапазонов, если есть два диапазона перекрываются, поведение неопределенно.
(выделено мной)
В вашем случае первый выходной диапазон перекрывается с входным диапазоном, и поэтому возникает UB. Нет смысла рассуждать о результатах программы.
Также обратите внимание, что:
int copy_here[7];
оставляет элементы неинициализированными. Если читать те, которые не были инициализированы алгоритмом, то попадаешь в другой УБ.
Вы можете исправить это, используя:
//--------------vv-
int copy_here[7]{};
Это инициализирует все элементы нулями.
@MarekR извините за путаницу, я хотел, чтобы вы предположили, что массив copy_here инициализируется значением 0, моя ошибка, мне не следовало лениться его добавить.
@Ellie, лучший способ избежать путаницы — задать вопрос с помощью модульного теста, показывающего проблему (как в ссылках, которые я предоставил в комментариях). Такие тесты — лучший способ предоставить минимально воспроизводимый пример.
Комментарии перенесены в чат ; пожалуйста, не продолжайте обсуждение здесь. Прежде чем оставлять комментарий под этим, пожалуйста, ознакомьтесь с целями комментариев . Комментарии, которые не требуют разъяснений или предложений по улучшению, обычно размещаются в виде ответа , в Meta Stack Overflow или в Stack Overflow Chat. Комментарии продолжения обсуждения могут быть удалены.