Std::partition_copy: что происходит, когда диапазон вывода d_first_true перекрывается с диапазоном ввода?

например:

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.

Обратите внимание, что только ОП может в конечном итоге подтвердить, решит ли цель обмана их проблему или нет. Пользователи, у которых нет соответствующих золотых значков для одностороннего закрытия/повторного открытия сообщения, могут отредактировать сообщение для ясности, но не вставляя слов в уста ОП. Замечания о применимости дюпов лучше всего подходят для комментариев. Замечания о самом процессе редактирования никуда не годятся. Пожалуйста, не откатывайтесь снова, иначе мне придется заблокировать сообщение. Если пост недостаточно ясен/воспроизводим, чтобы определить применимость целей дублирования, его можно закрыть как неясный.

blackgreen 13.06.2024 09:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш код вызывает UB (Undefine Behavior), и поэтому может случиться что угодно.

из документации std::partition_copy:

Среди входного диапазона и двух выходных диапазонов, если есть два диапазона перекрываются, поведение неопределенно.

(выделено мной)

В вашем случае первый выходной диапазон перекрывается с входным диапазоном, и поэтому возникает UB. Нет смысла рассуждать о результатах программы.

Также обратите внимание, что:

int copy_here[7];

оставляет элементы неинициализированными. Если читать те, которые не были инициализированы алгоритмом, то попадаешь в другой УБ.
Вы можете исправить это, используя:

//--------------vv-
int copy_here[7]{};

Это инициализирует все элементы нулями.

@MarekR извините за путаницу, я хотел, чтобы вы предположили, что массив copy_here инициализируется значением 0, моя ошибка, мне не следовало лениться его добавить.

Ellie 12.06.2024 14:37

@Ellie, лучший способ избежать путаницы — задать вопрос с помощью модульного теста, показывающего проблему (как в ссылках, которые я предоставил в комментариях). Такие тесты — лучший способ предоставить минимально воспроизводимый пример.

Marek R 12.06.2024 14:44

Другие вопросы по теме

Оптимизировать запрос к секционированной таблице без ключа секционирования в предложении WHERE
Как определить количество разделов при настройке временного кластера?
Помогает ли секционирование при чтении ключевых столбцов с помощью функции?
Безопасно ли удалять раздел сразу после его одновременного отсоединения?
Как запросить таблицу, имя которой построено на основе результата функции PL/pgSQL?
Распределите список положительных чисел на желаемое количество наборов, стараясь, чтобы суммы между ними были как можно ближе
Как суммировать количество заказов для каждого номера детали с текущей даты до текущей даты — времени выполнения заказа?
MariaDB не выбирает в соответствии с разделом многораздельной таблицы
Можно ли использовать секционирование для запросов LIKE в Postgres?
Стратегия разделов/архивов Oracle для таблицы измерений типа 2

Похожие вопросы

Как мне обойти то, что кажется целочисленным переполнением, несмотря на то, что тип достаточно большой
Когда необходимо устранить неоднозначность между объявлениями и выражениями?
Захват битовых полей по ссылке в лямбда-выражении
Инициализировать unordered_set как статическую переменную-член вместо инициализации в конструкторе в C++
OpenCL – Как предотвратить появление ошибок сборки при переходе к стандартной ошибке?
Является ли вставка в вектор при одновременном доступе к вектору неопределенным поведением?
Почему указатели на элементы данных можно вызывать в C++?
Ошибка компиляции при использовании функций шаблона C++, которые принимают в качестве аргументов другие функции, которые принимают ссылки на указатели
Специализация шаблона вне встроенного пространства имен функции, определенной внутри встроенного пространства имен
Как я могу устранить неоднозначность вызова конструктора с параметром из создания именованного экземпляра?