Шаг 5.
Библиотека STL.
Базовые операции над векторами

    На этом шаге мы рассмотрим базовые операции над векторами.

    Рассмотрим пример, который иллюстрирует базовое поведение вектора.

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

#include <vcl.h>
#include <iostream>
#include <vector>
#include <winuser.h>
#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<int> v; // создание вектора нулевой длины
  unsigned int i;
  //Отображаем исходный размер вектора
  cout << ToRus("Размер = ")<< v.size() <<endl;
  /* Помещаем значения в конец вектора, и размер
  вектора будет по необходимости увеличиваться*/
  for (i = 0; i < 10; i++) v.push_back(i*i);
  // Отображаем текущий размер вектора v.
  cout <<ToRus("Текущее содержимое")<<"\n";
  cout <<ToRus("Новый размер = ") <<v.size() << endl;

  // Отображаем содержимое вектора
  for (i = 0; i < v.size(); i++) cout << v[i] << " ";
  cout << endl;
  //Помещаем в конец вектора новые значения
  for (i = 0; i < 10; i++) v.push_back((i+10)*(i+10));
  // Отображаем текущий размер вектора.
  cout<<ToRus("Новый размер = ")<< v.size() << endl;

  // Отображаем содержимое вектора.
  cout <<ToRus("Текущее содержимое\n");
  for (i = 0; i < v.size(); i++) cout << v[i] << " ";
  cout << endl;

  // Изменяем содержимое вектора
  for (i = 0; i < v.size(); i++) v[i] = v[i] + v[i];
  // Отображаем содержимое вектора.
  cout << ToRus("Содержимое удвоено\n");
  for (i = 0; i < v.size(); i++) cout << v[i] << " ";
  cout << endl;
  getch();
  return 0;
}
//---------------------------------------------------------------------------

Текст этого примера можно взять здесь.

    Результаты выполнения этой программы представлены на рисунке 1.


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

    Приведенные комментарии объясняют принцип работы приложения. Мы остановимся более подробно на особенностях создания консольных приложений.

    Достаточно часто при выполнении консольных приложений вместо русских букв на экране отображается "арабская вязь". Чтобы этого избежать мы используем функцию ToRus(), основой которой является API-функция CharToOem(). Первый параметр этой функции - массив типа char, содержащий исходную строку, а второй параметр - преобразованный символьный массив:

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;
}

    Так как мы посылаем в качестве входного параметра в функцию ToRus() строку, то должны преобразовать ее преобразовать перед использованием в CharToOem() к типу char*. Это делается методом c_str().

    В последующих приложениях мы будем пользоваться функцией ToRus().

    На следующем шаге мы рассмотрим .




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