STLAlgorithmExtensions
От: igna Россия  
Дата: 02.12.09 14:13
Оценка: 5 (1)

There are lots of useful algorithms that didn't make it into the C++ standard as part of the STL. The scope of this page is to consider a Boost Algorithm library that consists of STL-like algorithms, algorithms over sequences. The following is the list of algorithms that would go into this library. Please add to this list!

здесь


Давно пора.
Re: STLAlgorithmExtensions
От: Alexander G Украина  
Дата: 02.12.09 14:57
Оценка:
Здравствуйте, igna, Вы писали:

I> Please add to this list!


А зачем оно надо.
Зачем, например, такое:

This algorithm returns true if the predicate is true for none of the elements in the range.

template <typename InputIterator, typename Predicate>
bool none(InputIterator first, InputIterator last, Predicate p)
{
  return std::find_if(first, last, p) == last;
}

Русский военный корабль идёт ко дну!
Re[2]: STLAlgorithmExtensions
От: igna Россия  
Дата: 02.12.09 15:14
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Зачем, например, такое:

This algorithm returns true if the predicate is true for none of the elements in the range.

template <typename InputIterator, typename Predicate>
AG>bool none(InputIterator first, InputIterator last, Predicate p)
AG>{
AG>  return std::find_if(first, last, p) == last;
AG>}


Затем, чтобы не писать два раза одно и тоже, last может быть достаточно громоздким.
Re[3]: STLAlgorithmExtensions
От: Alexander G Украина  
Дата: 02.12.09 15:36
Оценка:
Здравствуйте, igna, Вы писали:

I>Затем, чтобы не писать два раза одно и тоже, last может быть достаточно громоздким.


Ради экономии на одной переменной вызывать метод с непонятным названием?
Кроме того, обычно ищут в ассоциативных контейнерах, поэтому всё равно требуется писать == last, и лучше привыкнуть к однообразному способу.
Русский военный корабль идёт ко дну!
Re[4]: STLAlgorithmExtensions
От: igna Россия  
Дата: 02.12.09 15:41
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Ради экономии на одной переменной вызывать метод с непонятным названием?


Если метод войдет в Boost, то да.

AG>Кроме того, обычно ищут в ассоциативных контейнерах, поэтому всё равно требуется писать == last


Почему?
Re[5]: STLAlgorithmExtensions
От: Alexander G Украина  
Дата: 02.12.09 17:07
Оценка:
Здравствуйте, igna, Вы писали:

AG>>Ради экономии на одной переменной вызывать метод с непонятным названием?


I>Если метод войдет в Boost, то да.


boost::none — плохое, непонятное имя.

AG>>Кроме того, обычно ищут в ассоциативных контейнерах, поэтому всё равно требуется писать == last


I>Почему?


Потому что для них find — метод, а не функиця. Я рассматриваю типичный случай — поиск по значению ключа.
Русский военный корабль идёт ко дну!
Re[6]: STLAlgorithmExtensions
От: igna Россия  
Дата: 02.12.09 17:14
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>boost::none — плохое, непонятное имя.


Согласен, boost::ни_один лучше.

AG>Потому что для них find — метод, а не функиця. Я рассматриваю типичный случай — поиск по значению ключа.


Ну так тогда синтаксис использования все равно другой.
Re[2]: STLAlgorithmExtensions
От: jazzer Россия Skype: enerjazzer
Дата: 02.12.09 18:32
Оценка: +1
Здравствуйте, Alexander G, Вы писали:

AG>А зачем оно надо.

AG>Зачем, например, такое:

вообще-то, all/any(exists)/none — это стандартный набор многих библиотек алгоритмов, например, Boost.Fusion: http://www.boost.org/libs/fusion/doc/html/fusion/algorithm/query/metafunctions.html
И самое главное — эти алгоритмы уже есть в С++0х (раздел 25.2), наряду с многими другими, типа copy_if/copy_n (25.3.1)

А зачем надо — затем, что оно недвусмысленно говорит о намерениях программиста ("ни один элемент не удовлетворяет предикату"), и не заставляет вычислять эти намерения через анализ кода прямого сравнения find_if с end и прочего — ведь в этом коде может быть и баг? в то время как с none вероятность бага ничтожна.
KISS в действии. Хочешь сказать "Ни один" — скажи это явно, без заковыристых сравнений.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
c++0x
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.