|
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 8
|
||||||
алгоритм std::remove_copy_if()23.04.2020, 23:47. Показов 2540. Ответов 17
Метки нет (Все метки)
Всем привет!
В документации сказано, что исходный и целевой диапазоны не должны пересекаться. https://ru.cppreference.com/w/... emove_copy Однако у Джосьютиса в книге по STL приводится реализация другого алгоритма remove_if(), использующая в своем теле алгоритм -сабж remove_copy_if() . В этой реализации remove_copy_if() использован с перекрывающимися диапазонами
Спасибо.
0
|
||||||
| 23.04.2020, 23:47 | |
|
Ответы с готовыми решениями:
17
Алгоритм std::find_end - аналог std::search_n Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream Remove_copy_if |
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 23.04.2020, 23:58 | |
|
Ingeniger, реализаций может быть много. Если написано, что не должны пересекаться - значит не должны. В какой-то реализации прокатит, но при смене компилятора будет фэйл.
0
|
|
|
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 8
|
||
| 24.04.2020, 00:05 [ТС] | ||
|
Это ведь не первая редакция.
0
|
||
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
|||
| 24.04.2020, 00:08 | |||
|
Попросту выражаясь, если автор кода стандартной библиотеки уверен, что такой вызов remove_copy_if в такой ситуации сработает правильно (опираясь, понятное дело, на знание деталей реализации remove_copy_if именно в этой реализации библиотеки), то никто ему не запрещает пользоваться remove_copy_if.Вам же - клиенту стандартной библиотеки - этого не дозволяется.
1
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 24.04.2020, 00:10 | |
|
Ingeniger, почему ошибка? Он приводит пример реализации. Она соответствует требованиям? Соответствует. А то, что она работает даже с перекрывающимися диапазонами (верю вам на слово, не читал)... ну так замечательно. В другой реализации может быть не так.
0
|
|
|
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
|
|
| 24.04.2020, 00:10 | |
|
Ingeniger, это не ошибка, итератор beg не находится в диапазоне [++next, end), он установлен левее, на next, так что все в порядке.
0
|
|
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
||
| 24.04.2020, 00:12 | ||
remove_copy_if накладываются на диапазоны, а не на итераторы. И диапазоны в данном случае перекрываются, что не допускается remove_copy_if. То есть с точки зрения клиентского кода ошибка тут есть.
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||
| 24.04.2020, 00:16 | |||
|
0
|
|||
|
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
|
|||
| 24.04.2020, 00:17 | |||
[first, last), а под выходным понимается d_first, точно такие-же требования как и для обычного std::copy, только там cppreference пишет об этом явно:
Я не вижу причин почему для этой функции что-то может отличаться.
0
|
|||
|
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 8
|
||
| 24.04.2020, 00:20 [ТС] | ||
|
TheCalligrapher, концептуальное и логичное объяснение, спасибо. Сам не подумал об этом.
0
|
||
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
||
| 24.04.2020, 00:41 | ||
|
Реализация стандартной библиотеки пишется на чем угодно. Выбор средства реализации - полная свобода реализующего. Делается это в том числе потому, что реализовать стандартную библиотеку на "родном" целевом языке в рамках его правил практически невозможно. Обычно реализация стандартной библиотеки выполняется не некоем псевдоязыке, который может даже отдаленно напоминать целевой язык, для которого эта стандартная библиотека предназначена. Но это не более чем поверхностное сходство.
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 24.04.2020, 00:57 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 8
|
||
| 24.04.2020, 01:00 [ТС] | ||
|
Хэдеры - это же интерфейс, он на С++, естественно. А реализация уже скомпилирована.
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 24.04.2020, 01:08 | ||
|
0
|
||
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
|||
| 24.04.2020, 01:10 | |||
|
Фактически, как вы сами понимаете, они пишутся на платформенно-зависимом С++-подобном языке. То есть это "какбэ С++", но с полным игнорированием ограничений языка, соображений специфицированности или определенности поведения, с использованием внутренних неязыковых возможностей компилятора и т.п. То есть это не С++ вообще. Директива #include с именем стандартного хедера в треугольных скобках являются лишь особой специальной директивой, предписывающей реализации неким "магическим" образом сделать доступными соответствующие средства стандартной библиотеки в данной единице трансляции. Ни о каком "включении" и "стать частью исходника" речи не идет в принципе.На практике, конечно, стандартные хедеры обычно являются просто файлами. Но это не более чем деталь реализации, не более чем простейший способ реализации стандартных хедеров.
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||||
| 24.04.2020, 01:26 | ||||
0
|
||||
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
||
| 24.04.2020, 02:33 | ||
|
1 Each element of the C++ standard library is declared or defined (as appropriate) in a header.164 164) A header is not necessarily a source file, nor are the sequences delimited by < and > in header names necessarily valid source file names Идея такой спецификации понятна. И свобода, им предоставляемая, весьма широка. Спор на тему того, что именно включается в ваш файл результате - бессмысленная трата времени. Вы почему-то решили, что заглядывая в файл с аналогичным именем вы видите именно то, что будет включаться? Почему, спросит педант-абстракционист? Реализации могут смело использовать в реализации компонентов стандартной библиотеки и implementation-defined behavior, и unspecified behavior, и undefined behavior (т.е. расширения компилятора), и нестандартные процессорные intrinsics, и ассемблерные вставки, и код на Фортране, если в данной реализации все это поддерживается. А на ваш замечание о том, что "это же не С++", авторы могут ответить, что это просто не включается по #include <>. И тыкать их носом в результат работы препроцессора, в котором всё-таки всё это "включилось" бесполезно. Они вам скажут что вы суете нос в иррелевантные детали реализации, которые к тому же неправильно интерпретируете. И формально будут правы.
0
|
||
|
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
|
||
| 24.04.2020, 09:14 | ||
|
1
|
||
| 24.04.2020, 09:14 | |
|
Помогаю со студенческими работами здесь
18
Алгоритм std::set_union Работа функции remove_copy_if () ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
STL std::set, std::pair, std::make_pair Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|