Язык программирования C++. Вводный курс


Итераторы - часть 3


#include <vector>

#include <string>

#include <iterator>

 

int mainQ

{

    // привязка istream_iterator к стандартному вводу

    istream_iterator<string> infile( cin );

 

    // istream_iterator, отмечающий конец потока

    istream_iterator<string> eos;

 

    // инициализация svec элементами, считываемыми из cin;

    vector<string> svec( infile, eos );

 

    // ...

}

Кроме итераторов, для задания диапазона значений, инициализирующих контейнер, можно использовать два указателя на массив встроенного типа. Пусть есть следующий массив строк:

#include <string>

string words[4] = {

    "stately", "plump", "buck", "mulligan"

};

Мы можем инициализировать вектор с помощью указателей на первый элемент массива и на элемент, следующий за последним:

vector< string > vwords( words, words+4 );

Второй указатель служит “стражем”: элемент, на который он указывает, не копируется.

Аналогичным образом можно инициализировать список целых элементов:

int ia[6] = { 0, 1, 2, 3, 4, 5 };

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

В разделе 12.4 мы снова обратимся к итераторам и опишем их более детально. Сейчас информации достаточно для того, чтобы использовать итераторы в нашей системе текстового поиска. Но прежде чем вернуться к ней, рассмотрим некоторые дополнительные операции, поддерживаемые контейнерами.

Упражнение 6.9

Какие ошибки допущены при использовании итераторов:

const vector< int > ivec;

vector< string >    svec;

list< int >         ilist;

 

(a) vector<int>::iterator it = ivec.begin();

(b) list<int>::iterator   it = ilist.begin()+2;

(c) vector<string>::iterator it = &svec[0];

(d) for ( vector<string>::iterator

           it = svec.begin(); it != 0; ++it )

    // ...

Упражнение 6.10

Найдите ошибки в использовании итераторов:

int ia[7] = { 0, 1, 1, 2, 3, 5, 8 };

string sa[6] = {

    "Fort Sumter", "Manassas", "Perryville", "Vicksburg",

    "Meridian", "Chancellorsvine" };

 

(a) vector<string> svec( sa, &sa[6] );

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

(c) list<int> ilist2( ilist.begin(), ilist.begin()+2 );

(d) vector<int> ivec( &ia[0], ia+8 );

(e) list<string> slist( sa+6, sa );

(f) vector<string> svec2( sa, sa+6 );




Начало  Назад  Вперед



Книжный магазин