- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
// https://habr.com/ru/post/440388/
// Интервалы: грядущая эволюция C++
// Давайте теперь рассмотрим следующую задачу: имеется вектор, необходимо удалить
// из него все повторяющиеся элементы. В рамках текущего стандарта мы решали бы её так:
std::vector<T> vec=...;
std::sort( vec.begin(), vec.end() );
vec.erase( std::unique( vec.begin(), vec.end() ), vec.end() );
// При этом мы указываем имя вектора аж 6 раз! Однако, используя концепцию интервалов
// (объединив итераторы на начало и конец вектора в один объект), можно написать в разы проще, указав искомый вектор лишь единожды:
tc::unique_inplace( tc::sort(vec) );
//... Че, серьезно? Я так тоже могу:
// Однако, используя сишный препроцессор™, можно написать в разы проще, указав искомый вектор лишь единожды:
#define DELETE_DUPS(x) do{ std::sort( x.begin(), x.end() ); x.erase( x::unique( x.begin(), x.end() ), x.end() );}while(0)
DELETE_DUPS(vec);