Выбрать главу

int main()

{

 vector<char> v;

 unsigned int i;

 for(i=0; i<10; i++) v.push_back('A' + i);

 // Отображаем исходное содержимое вектора.

 cout << "Размер = " << v.size() << endl;

 cout << "Исходное содержимое вектора:\n";

 for(i=0; i<v.size(); i++) cout << v[i] << " ";

 cout << endl << endl;

 vector<char>:: iterator p = v.begin();

 p += 2; // указатель на 3-й элемент вектора

 // Вставляем 10 символов 'X' в вектор v.

 v.insert(p, 10, 'X');

 /* Отображаем содержимое вектора после вставки символов. */

 cout << "Размер вектора после вставки = " << v.size()<< endl;

 cout << "Содержимое вектора после вставки:\n";

 for(i=0; i<v.size(); i++) cout << v[i] << " ";

 cout << endl << endl;

 // Удаление вставленных элементов.

 p = v.begin();

 p += 2; // указатель на 3-й элемент вектора

 v.erase(р, р+10); // Удаляем 10 элементов подряд.

 /* Отображаем содержимое вектора после удаления символов. */

 cout << "Размер вектора после удаления символов = "<< v.size() << endl;

 cout << "Содержимое вектора после удаления символов:\n";

 for(i=0; i<v.size(); i++) cout << v[i] << " ";

 cout << endl;

 return 0;

}

При выполнении эта программа генерирует следующие результаты.

Размер = 10

Исходное содержимое вектора:

A B C D E F G H I J

Размер вектора после вставки = 20

Содержимое вектора после вставки:

A B X X X X X X X X X X C D E F G H I J

Размер вектора после удаления символов = 10

Содержимое вектора после удаления символов:

A B C D E F G H I J

Сохранение в векторе объектов класса

В предыдущих примерах векторы служили для хранения значений только встроенных типов, но этим их возможности не ограничиваются. В вектор можно помещать объекты любого типа, включая объекты классов, создаваемых программистом. Рассмотрим пример, в котором вектор используется для хранения объектов класса three_d. Обратите внимание на то, что в этом классе определяются конструктор по умолчанию и перегруженные версии операторов "<" и "==". Имейте в виду, что, возможно, вам придется определить и другие операторы сравнения. Это зависит от того, как используемый вами компилятор реализует библиотеку STL.

// Хранение в векторе объектов класса.

#include <iostream>

#include <vector>

using namespace std;

class three_d {

  int x, y, z;

 public:

  three_d() { x = у = z = 0; }

  three_d(int a, int b, int с) { x = a; у = b; z = c; }

  three_d &operator+(int a) {

   x += a;

   у += a;

   z += a;

   return *this;

  }

  friend ostream &operator<<(ostream &stream, three_d obj);

  friend bool operator<(three_d a, three_d b);

  friend bool operator==(three_d a, three_d b);

};

/* Отображаем координаты X, Y, Z с помощью оператора вывода для класса three_d. */

ostream &operator<<(ostream &stream, three_d obj)

{

 stream << obj.x << ", ";

 stream << obj.у << ", ";

 stream << obj.z << "\n";

 return stream;

}

bool operator<(three_d a, three_d b)

{

 return (a.x + a.у + a.z) < (b.x + b.y + b.z);

}