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


         

Что делать, если мы хотим


        if ( *c_iter % 2 )

            pvec_even->push_back( *c_iter );

        else pvec_odd->push_back( *c_iter );

}

Что делать, если мы хотим просмотреть  некоторое подмножество элементов, например взять каждый второй или третий элемент, или хотим начать с середины? Итераторы поддерживают адресную арифметику, а значит, мы можем прибавить некоторое число к итератору:

vector<int>::iterator iter = vec->begin()+vec.size()/2;

iter получает значение адреса элемента из середины вектора, а выражение

iter += 2;

сдвигает iter на два элемента.

Арифметические действия с итераторами возможны только для контейнеров vector и deque. list не поддерживает адресную арифметику, поскольку его элементы не располагаются в непрерывной области памяти. Следующее выражение к списку неприменимо:

ilist.begin() + 2;

так как для перемещения на два элемента необходимо два раза перейти по адресу, содержащемуся в закрытом члене next. У классов vector и deque перемещение на два элемента означает прибавление 2 к указателю на текущий элемент. (Адресная арифметика рассматривается в разделе 3.3.)

Объект контейнерного типа может быть инициализирован парой итераторов, обозначающих начало и конец последовательности копируемых в новый объект элементов. (Второй итератор должен указывать на элемент, следующий за последним копируемым.) Допустим, есть вектор:

#include <vector>

#include <string>

#include <iostream>

int main()

{

    vector<string> svec;

    string intext;

    while ( cin >> intext )

        svec.push_back( intext );

    // обработать svec ...

}

Вот как можно определить новые векторы, инициализируя их элементами первого вектора:

int main() {

    vector<string> svec;

    // ...

    // инициализация svec2 всеми элементами svec

    vector<string> svec2( svec.begin(), svec.end() );

    // инициализация svec3 первой половиной svec

    vector<string>::iterator it =

               svec.begin() + svec.size()/2;


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





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий