Лабораторная работа №5
Востропятов Н. А.
Вар №9
Простой однонаправленный упорядоченный по возрастанию.
Из списка s1 образовать список s2, в котором из элементов в s1, имеющих одинаковое содержимое, присутствует только один.
#include <stdio.h>
#include <conio.h>
#include <vector>
#include <algorithm>
#include <functional>
class Element
{
public:
Element(void) { data = 0; }
Element(int value) { data = value; }
Element(Element *a, Element &src) { a->data = src.data; }
~Element(void) { data = 0; }
int GetData(void) { return data; }
void SetData(int value) { data = value; }
inline Element operator=(const Element &a) { data = a.data; return data; }
private:
int data;
};
int compare(Element e1, Element e2)
{
if (e1.GetData() < e2.GetData())
return true;
return false;
}
void main()
{
std::vector<Element> s1;
std::vector<Element> s2;
std::vector<Element>::iterator iter;
for (int i=0; i < 8; i++)
{
if (i==4 || i==6)
s1.push_back(Element(i));
s1.push_back(Element(i));
}
std::stable_sort(s1.begin(), s1.end(), compare);
printf("\nS1:\n");
for (iter = s1.begin(); iter < s1.end(); iter++)
printf("Element: %d\n", iter->GetData());
getch();
// this algorithm is accepable only for sorted containers!
for (iter = s1.begin(); iter < s1.end(); iter++)
{
if (!(iter+1) || (iter+1)->GetData() != iter->GetData())
s2.push_back(Element(*iter));
}
printf("\nS2:\n");
for (iter = s2.begin(); iter < s2.end(); iter++)
printf("Element: %d\n", iter->GetData());
getch();
}
