C ++ стандартные / фактические обертки алгоритма STL - PullRequest
8 голосов
/ 01 февраля 2010

Существуют ли какие-либо стандартные / стандартные (расширенные) обертки вокруг стандартных алгоритмов, которые работают с контейнерами, определяющими начало и конец. Позвольте мне показать вам, что я имею в виду с кодом:

// instead of specifying begin and end
std::copy(vector.begin(), vector.end(), output);
// write as
xxx::copy(vector, output);

Я знаю, что это можно легко написать, но я специально ищу что-то вездесущее. Спасибо.

Ответы [ 4 ]

8 голосов
/ 01 февраля 2010

Существует расширение библиотеки Boost Range, называемое RangeEx, которое содержит обертки диапазонов для всех алгоритмов stl, а также некоторые новые.

Недавно он был принят в Boost, поэтому его пока нет в текущем «официальном» выпуске (1.41). Пока это не изменится, вы можете загрузить последнюю версию из Boost Vault.

Не знаю, станет ли это когда-либо частью стандарта C ++, но тот факт, что он включен в Boost, означает, что это будет de facto стандарт.

2 голосов
/ 01 февраля 2010

Следующий стандарт (надеюсь!) Изменит это.А пока взгляните на Boost.Range и его различные варианты использования, хотя я не знаю интерфейса со стандартными алгоритмами.

1 голос
/ 01 февраля 2010

Единственный случай, когда я видел нечто подобное, - это алгоритмы, основанные на библиотеке boost::range, но даже они на самом деле не модифицируют стандартные алгоритмы, такие как std::copy или std::remove_if - для рассматриваемого алгоритма нужны быть написанным, чтобы использовать в своих интересах такую ​​обертку диапазона.

Например, см. Библиотеку Boost String Algorithms .

0 голосов
/ 01 февраля 2010

Я добавлю свой собственный вывод: исходные библиотеки Adobe (rangex от boost заменяет часть алгоритмов) ASL

...