![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Filter IteratorBoost , ,
|
Author: | Дэвид Абрахамс, Джереми Сик, Томас Витт | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Contact: | Если Итератор Считываемый Lvalue Iterator и Bidirectional Traversal Iterator затем iterator_category конвертируется в std::bidirectional_iterator_tag. В противном случае, если Итератор Считываемый Lvalue Iterator и Forward Traversal Iterator затем iterator_category конвертируется в std::forward_iterator_tag. В противном случае iterator_category конвертируется в std::input_iterator_tag.
filter_iterator requirementsАргумент Iterator должен соответствовать требованиям Readable Iterator и Single Pass Iterator или соответствовать требованиям Input Iterator. Аргумент Predicate должен быть приемлемым, конструктивным для копирования, а выражение p(x) должно быть действительным, если p является объектом типа x является объектом типа iterator_traits filter_iterator modelsКонцепции, которые модели filter_iterator, зависят от того, какие концепции модели аргументов Iterator, как указано в следующих таблицах.
filter_iterator filter_iterator operationsВ дополнение к тем операциям, которые требуются для моделей filter_iterator, filter_iterator обеспечивает следующие операции. filter_iterator();
filter_iterator(Предсказатель f, Итератор x, Итератор end = Итератор());<17
filter_iterator(Iterator x, Iterator end = Iterator());
template <class OtherIterator> filter_iterator( filter_iterator<Predicate, OtherIterator> const& t , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition );``
Предсказание Предикат() конст;
Итератор конец() конст;
Итератор const& base() const;
ссылка оператор*() конст;
filter_iterator& operator++();
template <class Predicate, class Iterator> filter_iterator<Predicate,Iterator> make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
template <class Predicate, class Iterator> filter_iterator<Predicate,Iterator> make_filter_iterator(Iterator x, Iterator end = Iterator());
ExampleВ этом примере используется filter_iterator, а затем make_filter_iterator для вывода только положительных целых чисел из массива целых чисел. Затем make_filter_iterator используется для вывода целых чисел, превышающих -2. struct is_positive_number { bool operator()(int x) { return 0 < x; } }; int main() { int numbers_[] = { 0, -1, 4, -3, 5, 8, -2 }; const int N = sizeof(numbers_)/sizeof(int); typedef int* base_iterator; base_iterator numbers(numbers_); // Example using filter_iterator typedef boost::filter_iterator<is_positive_number, base_iterator> FilterIter; is_positive_number predicate; FilterIter filter_iter_first(predicate, numbers, numbers + N); FilterIter filter_iter_last(predicate, numbers + N, numbers + N); std::copy(filter_iter_first, filter_iter_last, std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl; // Example using make_filter_iterator() std::copy(boost::make_filter_iterator<is_positive_number>(numbers, numbers + N), boost::make_filter_iterator<is_positive_number>(numbers + N, numbers + N), std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl; // Another example using make_filter_iterator() std::copy( boost::make_filter_iterator( std::bind2nd(std::greater<int>(), -2) , numbers, numbers + N) , boost::make_filter_iterator( std::bind2nd(std::greater<int>(), -2) , numbers + N, numbers + N) , std::ostream_iterator<int>(std::cout, " ") ); std::cout << std::endl; return boost::exit_success; } Результатом является: 4 5 8 4 5 8 0 -1 4 5 8 Исходный код для этого примера можно найти здесь . Статья Filter Iterator раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |