Программирование >>  Инициализация объектов класса, структура 

1 ... 20 21 22 [ 23 ] 24 25 26 ... 395


разные способы создания объектов типа vector vector<int> vec0; пустой вектор

const int size = 8; const int value = 1024;

вектор размером 8

кажд элемент инициазируется 0 vector<int> vec1(size);

вектор размером 8 емент ин vector<int> vec2(size,value);

вектор размером 8 каждый элемент инициализируется числом 1024

вектор размером 4

инициализируется числами из массива ia

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

vector<int> vec3(ia,ia+4); vec4 - копия vec2 vector<int> vec4(vec2);

Так же, как наш класс Array, класс vector поддерживает операцию доступа по индексу.

#include <vector>

Вот пример перебора всех элементов вектора:

extern int getSize();

void mumble() {

int size = getSize(); vector<int> vec(size);

for (int ix=0; ix<size; ++ix) vec[ix] = ix;

...

Для такого перебора можно также использовать итераторную пару. Итератор - это объект класса, поддерживающего абстракцию указательного типа. В шаблоне класса vector определены две функции-члена - begin() и end() , устанавливающие итератор соответственно на первый элемент вектора и на элемент, который следует за последним. Вместе эти две функции задают диапазон элементов вектора. Используя итератор,

#include <vector>

предыдущий пример можно переписать таким образом:

extern int getSize();

void mumble() {

int size = getSize(); vector<int> vec(size);



vector<int>::iterator iter = vec.begin();

for (int ix=0; iter!=vec.end(); ++iter, ++ix) *iter = ix;

...

Определение переменной iter

vector<int>::iterator iter = vec.begin();

инициализирует ее адресом первого элемента вектора vec. iterator определен с помощью typedef в шаблоне класса vector, содержащего элементы типа int. Операция инкремента

++iter

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

*iter

В стандартной библиотеке С++ имеется поразительно много функций, работающих с классом vector, но определенных не как функции-члены класса, а как набор обобщенных алгоритмов. Вот их неполный перечень:

алгоритме! поиска: find(), find if(), search(), binary search(), count(), count if();

алгоритмы сортировки и упорядочения: sort() , partial sort() , merge() , partition() , rotate() , reverse() , random shuffle() ;

алгоритме! удаления: unique(), remove();

численные алгоритмы: accumulate() , partial sum() , inner product() , adjacent difference() ;

алгоритмы генерации и изменения последовательности: generate() , fill() , transform() , copy() , for each() ;

алгоритмы сравнения: equal() , min() , max() .

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

sort ( ivec.begin(), ivec.end() ); Чтобы применить алгоритм sort() только к первой половине вектора, мы напишем:

sort ( ivec.begin(), ivec.begin() + ivec.size()/2 );

Роль итераторной пары может играть и пара указателей на элементы встроенного массива. Пусть, например, нам дан массив:



int ia[7] = { 10, 7, 9, 5, 3, 7, 1 }; Упорядочить весь массив можно вызовом алгоритма sort() :

sort ( ia, ia+7 ); Так можно упорядочить первые четыре элемента:

sort ( ia, ia+4 );

Для использования алгоритмов в программу необходимо включить заголовочный файл

#include <algorithm>

Ниже приведен пример программ:, использующей разнообразные алгоритмы в применении к объекту типа vector:



1 ... 20 21 22 [ 23 ] 24 25 26 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика