С++ для начинающих




Пять категорий итераторов - часть 2


  • двунаправленный итератор может читать и записывать в контейнер, а также перемещаться по нему в обоих направлениях. Среди обобщенных алгоритмов, требующих как минимум двунаправленного итератора, выделяются place_merge(), next_permutation() и reverse();
  • итератор с произвольным доступом, помимо всей функциональности, поддерживаемой двунаправленным итератором, обеспечивает доступ к любой позиции внутри контейнера за постоянное время. Подобные итераторы требуются таким обобщенным алгоритмам, как binary_search(), sort_heap() и nth-element().
  • Упражнение 12.6

    Объясните, почему некорректны следующие примеры. Какие ошибки обнаруживаются во время компиляции?

    (a) const vector<string> file_names( sa, sa+6 );

        vector<string>::iterator it = file_names.begin()+2;

    (b) const vector<int> ivec;

        fill( ivec.begin(), ivec.end(), ival );

    (c) sort( ivec.begin(), ivec.end() );

    (d) list<int> ilist( ia, ia+6 );

        binary_search( ilist.begin(), ilist.end() );

    (e) sort( ivec1.begin(), ivec3.end() );

    Упражнение 12.7

    Напишите программу, которая читает последовательность целых чисел из стандартного ввода с помощью потокового итератора чтения istream_iterator. Нечетные числа поместите в один файл посредством ostream_iterator, разделяя значения пробелом. Четные числа таким же образом запишите в другой файл, при этом каждое значение должно размещаться в отдельной строке.




    Содержание  Назад  Вперед