Шаг 139.
Библиотека STL.
Контейнеры STL. Операции над векторами. Пример использования векторов

    На этом шаге мы рассмотрим еще один пример использования векторов.

    Ниже приведен еще один простой пример (еще один пример расположен в 5 шаге), демонстрирующий практическое применение векторов.

//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <conio.h> //необходимо для getch()

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

std::string ToRus(const std::string &in)
{
  char *buff = new char [in.length()+1];
  CharToOem(in.c_str(),buff);
  std::string out(buff);
  delete [] buff;
  return out;
}

int main(int argc, char* argv[])
{
  // Создание пустого вектора для хранения строк
  vector<string> sentence;

  // Резервируем память для пяти элементов,
  // чтобы предотвратить перераспределение
  sentence.reserve(5);

  // Присоединение нескольких элементов
  sentence.push_back(ToRus("Привет."));
  sentence.push_back(ToRus("Кто"));
  sentence.push_back(ToRus("пришел"));
  sentence.push_back(ToRus("сюда"));
  sentence.push_back("?");

  // Вывод элементов, разделенных пробелами
  copy (sentence.begin(), sentence.end(),
        ostream_iterator<string>(cout," "));
  cout << endl;

  // Вывод "служебных данных"
  cout << " max_size(): " << sentence.max_size() << endl;
  cout << " size(): " << sentence.size() << endl;
  cout << " capacity(): " << sentence.capacity() << endl;

  // Перестановка второго и четвертого элемента
  swap (sentence[1],sentence[3]);

  // Вставка элемента "сейчас" перед элементом "?"
  sentence.insert (find(sentence.begin(),sentence.end(),"?"),
                        ToRus("сейчас"));
  // Присваивание "!" последнему элементу
  sentence.back() = "!";

  // Вывод элементов, разделенных пробелами
  copy (sentence.begin(), sentence.end(),
        ostream_iterator<string>(cout," "));
  cout << endl;

  // Повторный вывод "служебных данных"
  cout << " max_size(): " << sentence.max_size() << endl;
  cout << " size(): " << sentence.size() << endl;
  cout << " capacity(): " << sentence.capacity() << endl;

  cout << endl;

  getch();
  return 0;
}
//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

    Результат выполнения программы выглядит примерно так:


Рис.1. Результат работы приложения

    Обратите внимание на формулировку "примерно так". Значения max_size() и capacity() зависят от реализации. Например, в данном случае видно, что если вектор не помещается в зарезервированной памяти, реализация удваивает его емкость.

    На следующем шаге мы рассмотрим класс vector<bool>.




Предыдущий шаг Содержание Следующий шаг