Операции над векторами. Пример использования векторов

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

   
Ниже приведен еще один простой пример (еще один пример расположен в 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>.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий