Шаг 13.
Библиотека STL.
Хранение в списке объектов класса

    На этом шаге мы рассмотрим пример хранения в списке объектов класса.

    В данном примере рассматривается список, который используется для хранения объектов типа sumclass.

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

#include <vcl.h>
#include <iostream>
#include <list>
#include <cstring>
#include <winuser.h>
#include <conio.h> //необходимо для getch()
#pragma hdrstop

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

#pragma argsused
using namespace std;

class sumclass
{
   int a, b;
   int sum;
public:
   sumclass() { a = b = 0; }
   sumclass(int i, int j) { a = i; b = j; sum = a + b; }
   int getsum() { return sum; }
   friend bool operator<(const sumclass &o1,
   	                  const sumclass &o2);
   friend bool operator>(const sumclass &o1,
   	                  const sumclass &o2);
   friend bool operator==(const sumclass &o1,
   	                   const sumclass &o2);
   friend bool operator!=(const sumclass &o1,
   	                   const sumclass &o2);
};

bool operator<(const sumclass &o1, const sumclass &o2)
{
   return o1.sum < o2.sum;
}
bool operator>(const sumclass &o1, const sumclass &o2)
{
   return o1.sum > o2.sum;
}
bool operator==(const sumclass &o1, const sumclass &o2)
{
   return o1.sum == o2.sum;
}
bool operator!=(const sumclass &o1, const sumclass &o2)
{
   return o1.sum != o2.sum;
}

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[])
{
  int i;

  list<sumclass> lst1;
  for(i=0; i<10; i++) lst1.push_back(sumclass(i,i));
  cout << ToRus("Первый список: ");
  list<sumclass>::iterator p = lst1.begin();
  while(p != lst1.end())
  {
  	cout << p->getsum() << " ";
  	p++;
  }
  cout << endl;

  // Создание второго списка.
  list<sumclass> lst2;
  for(i=0; i<10; i++) lst2.push_back(sumclass(i*5, i*10));

  cout <<ToRus("Второй список: ");
  p = lst2.begin();
  while(p != lst2.end())
  {
  	cout << p->getsum() << " ";
  	p++;
  }
  cout << endl;
  // Теперь объединяем списки lst1 и lst2.
  lst1.merge(lst2);

  //Отображаем объединенный список.
  cout << ToRus("Объединенный список: ");
  p = lst1.begin();
  while(p != lst1.end())
  {
  	cout << p->getsum() << " ";
  	p++;
  }

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

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


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

    Со следующего шага мы начнем рассматривать отображения.




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