madf: (Default)
[personal profile] madf
Мабуть всі C++-програмісти знають про те що насправді робить алгоритм std::remove_if. Що він нічого не видаляє а лише переміщує елементи послідовності для яких предикат істинний у кінець послідовності. Звісно для цього він використовує swap і, як наслідок, operator=.
Але, мабуть, не всі знають про те як працює метод std::list::remove_if. Як мінімум, він має зовсім іншу сигнатуру:
template<typename _Predicate>
void
remove_if(_Predicate);
_Winnie C++ Colorizer

А найголовніше те, що він видаляє із списку елементи для яких предикат істинний!
Це для мене було великим сюрпризом. Я очікував поведінки схожої з узагальненим алгоритмом, за виключенням того що swap оперує не значеннями елементів а вказівниками (це ж список).
В принципі, така поведінка мене цілком влаштовує. Я засунув operator= глибоко в private, а конструктор копії обвішав assert'ами (твердженнями?) бо він мені таки потрібний. Код працює, не сегфолтить і не вивалюється з assertion failed.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

madf: (Default)
madf

April 2018

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 8th, 2026 06:14 pm
Powered by Dreamwidth Studios