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


Класс vector - часть 2


int ia[ 6 ] = { -2, -1, О, 1, 2, 1024 };

Для объекта класса vector

аналогичное действие невозможно. Однако такой объект может быть инициализирован с помощью массива встроенного типа:

// 6 элементов ia копируются в ivec

vector< int > ivec( ia, ia+6 );

Конструктору вектора ivec

передаются два указателя – указатель на начало массива ia и на элемент, следующий за последним. В качестве списка начальных значений допустимо указать не весь массив, а некоторый его диапазон:

// копируются 3 элемента: ia[2], ia[3], ia[4]

vector< int > ivec( &ia[ 2 ], &ia[ 5 ] );

Еще одним отличием вектора от массива встроенного типа является возможность инициализации одного объекта типа vector другим и использования операции присваивания для копирования объектов. Например:

vector< string > svec;

 

void init_and_assign()

{

    // один вектор инициализируется другим

    vector< string > user_names( svec );

    // ...

 

    // один вектор копируется в другой

    svec = user_names;

}

Говоря об идиоме STL[6], мы подразумеваем совсем другой подход к использованию вектора. Вместо того чтобы сразу задать нужный размер, мы определяем пустой вектор:

vector< string > text;

Затем добавляем к нему элементы при помощи различных функций. Например, функция push_back()вставляет элемент в конец вектора. Вот фрагмент кода, считывающего последовательность строк из стандартного ввода и добавляющего их в вектор:

string word;

while ( cin >> word ) {

    text.push_back( word );

    // ...

}

Хотя мы можем использовать операцию взятия индекса для перебора элементов вектора:

cout << "считаны слова: \n";

for ( int ix =0; ix < text.size(); ++ix )

    cout << text[ ix ] << ' ';

cout << endl;

более типичным в рамках данной идиомы будет использование итераторов:

cout << "считаны слова: \n";

for ( vector<string>::iterator it = text.begin();

      it != text.end(); ++it )

    cout << *it << ' ';

<


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



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