|  | 
|      | 
|  | 
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||