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



Стандартный массив – это вектор - часть 2


#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().



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