_type2>
void ProceadSTL<_type1, _type2>::SortVek1()
{
sort(m_vek1.begin(), m_vek1.end());
}
template <class _type1, class _type2>
void ProceadSTL<_type1, _type2>::SortVek2()
{
sort(m_vek2.begin(), m_vek2.end());
}
template <class _type1, class _type2>
void ProceadSTL<_type1, _type2>::MergeVek1Vek2()
{
sort(m_vek1.begin(), m_vek1.end());
sort(m_vek2.begin(), m_vek2.end());
merge(m_vek1.begin(), m_vek1.end(), m_vek2.begin(), m_vek2.end(), m_vek1.begin());
m_vek2.clear();
}
template <class _type1, class _type2>
void ProceadSTL<_type1, _type2>::SortMatrix1()
{
sort(m_matrix1.begin(), m_matrix1.end());
for (size_t i = 0 ; i < m_matrix1.size(); i++)
{
sort(m_matrix1[i].begin(), m_matrix1[i].end());
}
}
template <class _type1, class _type2>
void ProceadSTL<_type1, _type2>::SortMatrix2()
{
sort(m_matrix2.begin(), m_matrix2.end());
for (size_t i = 0 ; i < m_matrix2.size(); i++)
{
sort(m_matrix2[i].begin(), m_matrix2[i].end());
}
}
template <class _type1, class _type2>
void ProceadSTL<_type1, _type2>::MergeMatrix12()
{
sort(m_matrix1.begin(), m_matrix1.end());
sort(m_matrix2.begin(), m_matrix2.end());
merge(m_matrix1.begin(), m_matrix1.end(), m_matrix2.begin(), m_matrix2.end(), m_matrix1.begin());
m_matrix2.clear();
}
template <class _type1, class _type2>
bool ProceadSTL<_type1, _type2>::operator == (const ProceadSTL<_type1, _type2>& rhs)
{
if (this == & rhs){
return true;
}
if (m_size != rhs.m_size) {
return false;
}
if (m_vek1.size() != rhs.m_vek1.size()) return false;
if (m_vek2.size() != rhs.m_vek2.size()) return false;
if (m_matrix1.size() != rhs.m_matrix1.size()) return false;
if (m_matrix1.size() != rhs.m_matrix2.size()) return false;
if (m_vek1 == rhs.m_vek1) return true;
if (m_vek2 == rhs.m_vek2) return true;
if (m_matrix1 == rhs.m_matrix1) return true;
if (m_matrix2 == rhs.m_matrix2) return true;
}
template <class _type1, class _type2>
bool ProceadSTL<_type1, _type2>::operator != (const ProceadSTL<_type1, _type2>& rhs)
{
return (!operator == (rhs));
}
template <class _type1, class _type2>
bool ProceadSTL<_type1, _type2>::operator < (const ProceadSTL<_type1, _type2>& rhs)
{
if (this == & rhs) return false;
if (m_size < rhs.m_size) return true;
else return false;
if (m_vek1 < rhs.m_vek1) retutn true;
else return false;
}
template <class _type1, class _type2>
bool ProceadSTL<_type1, _type2>::operator <= (const ProceadSTL<_type1, _type2>& rhs)
{
return (operator == (rhs) || operator < (rhs));
}
template <class _type1, class _type2>
bool ProceadSTL<_type1, _type2>::operator > (const ProceadSTL<_type1, _type2>& rhs)
{
return (operator == (rhs) || operator < (rhs));
}
template <class _type1, class _type2>
bool ProceadSTL<_type1, _type2>::operator >= (const ProceadSTL<_type1, _type2>& rhs)
{
return (operator == (rhs) || operator > (rhs));
}
template <class _type1, class _type2>
ostream & operator << (ostream & output, const ProceadSTL<_type1, _type2>& pstl)
{
output << "Вектор 1 - \n[" << pstl.getSize() << "] (";
for (size_t i = 0; i < pstl.m_vek1.size(); i++ )
{
output << pstl.m_vek1[i] << " ";
}
output << ")\n";
output << "Вектор 2 - \n["<< pstl.getSize() << "] (";
for (size_t i = 0; i < pstl.m_vek2.size(); i++ )
{
output << pstl.m_vek2[i] << " ";
}
output << ")\n";
output << "Матриця 1 - \n["<< pstl.getSize() << "] (";
for (size_t i = 0; i < pstl.m_matrix1.size(); i++ )
{
for (size_t j = 0; j < pstl.m_matrix1[i].size(); j++ )
{
output << pstl.m_matrix1[i][j] << " ";
}
output << "\n";
}
output << ")\n";
output << "Матриця 2 - \n["<< pstl.getSize() << "] (";
for (size_t i = 0; i < pstl.m_matrix1.size(); i++ )
{
for (size_t j = 0; j < pstl.m_matrix1[i].size(); j++ )
{
output << pstl.m_matrix1[i][j] << " ";
}
output << "\n";
}
output << ")\n";
return output;
}
template <class _type1, class _type2>
istream & operator >> (istream & input, ProceadSTL<_type1, _type2> & pstl)
{
_type1 inputValue;
input >> inputValue;
return input;
}
Лістинг 3. Файл STL.cpp — Головний модуль прорами тестування
// STL.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "ProceadSTL.h"
#include "ProceadSTL.cpp"
#include "strvalues.h"
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
typedef int typ1;
typedef double typ2;
typedef ProceadSTL<typ1, typ2> TWOTYPED;
#define DEFAULT_SIZE 10
void MakeMatrix(TWOTYPED& container);
void MakeVector(TWOTYPED& container);
void EraceAll(TWOTYPED& container);
void DeleteMatrix(TWOTYPED& container);
void ResizeMatrix(TWOTYPED& container);
void ResizeVectors(TWOTYPED& container);
void ResizeMatrix1(TWOTYPED& container);
void ResizeVector1(TWOTYPED& container);
void ResizeMatrix2(TWOTYPED& container);
void ResizeVector2(TWOTYPED& container);
void Show(const TWOTYPED& cont);
int _tmain(int argc, _TCHAR* argv[])
{
TWOTYPED container;
setlocale(LC_ALL, ".1251");
::SetConsoleTitle(OEM(STR::Title));
try
{
cout << "==============================\n"
<< "Введiть одну з можливих команд\n"
<< "\t'm' - створити випадкову матрицю\n\t'v' - створити випадковий масив\n"
<< "\t'e' - очистити всi\n\t'd' - видалити матрицi\n"
<< "\t'a' - змiнити розмiр матриць\n\t'z' - змiнити розмiр векторiв\n"
<< "\t'1' - змiнити розмiр матрицi 1\n\t'2' - змiнити розмiр вектора 1\n"
<< "\t'3' - змiнити розмiр матрицi 2\n\t'4' - змiнити розмiр вектора 2\n"
<< "\t's' - сортувати матрицi\n\t'w' - сортувати вектори\n"
<< "\t'!' - вихiд" << endl;
cout << "==============================\n";
char command;
for (;;)
{
cin >> command;
switch (command)
{
case 'm':
MakeMatrix(container);
break;
case 'v':
MakeVector(container);
break;
case 'e':
EraceAll(container);
break;
case 'd':
DeleteMatrix(container);
break;
case 'a':
ResizeMatrix(container);
break;
case 'z':
ResizeVectors(container);
break;
case '1':
ResizeMatrix1(container);
break;
case '2':
ResizeVector1(container);
break;
case '3':
ResizeMatrix2(container);
break;
case '4':
ResizeVector2(container);
break;
case 's':
container.SortMatrix1();
container.SortMatrix2();
Show(container);
break;
case 'w':
container.SortVek1();
container.SortVek2();
Show(container);
break;
case '!':
return 0;
default:
Show(container);
}
}
command = 0;
} catch (exception& e) {
std::cout << MakeError(e.what());
MessageBox(0, (LPCSTR)e.what(), LPCSTR("Помилка виконання програми"), MB_ICONERROR);
return -1;
}
return 0;
}
void MakeMatrix(TWOTYPED& container)
{
container.setMatrix1Size(DEFAULT_SIZE, DEFAULT_SIZE);
container.setMatrix2Size(DEFAULT_SIZE, DEFAULT_SIZE);
srand( (unsigned)time( NULL ) );
for (size_t i = 0; i < DEFAULT_SIZE; i++)
for (size_t j = 0; j < DEFAULT_SIZE; j++)
{
long rand100 = (((double) rand() / (double) 100) * 100 + 0);
container.getFromMatrix1(i,j) = rand100;
container.getFromMatrix2(i,j) = (typ2)rand();
}
Show(container);
}
void MakeVector(TWOTYPED& container)
{
container.ResizeVek1(DEFAULT_SIZE);
container.ResizeVek2(DEFAULT_SIZE);
srand( (unsigned)time( NULL ) );
for (int i = 0; i < DEFAULT_SIZE; i++)
{
long rand100 = (((double) rand() / (double) 100) * 100 + 0);
container.getFromVek1(i) = rand100;
container.getFromVek2(i) = (typ2)rand();
}
Show(container);
}
void EraceAll(TWOTYPED& container)
{
cout << "Знищенi всi данi з контейнера" << endl;
container.Clear();
Show(container);
}
void DeleteMatrix(TWOTYPED& container)
{
cout << "Всi данi з матриць знищенi" << endl;
container.ClearMatrix();
Show(container);
}
void ResizeMatrix(TWOTYPED& container)
{
int x, y;
cout << "Введiть розмiри матрицi 1" << endl;
cin >> x >> y;
container.setMatrix1Size(x, y);
cout << "Введiть розмiри матрицi 2" << endl;
cin >> x >> y;
container.setMatrix2Size(x, y);
Show(container);
}
void ResizeVectors(TWOTYPED& container)
{
int x;
cout << "Введiть розмiр вектора 1" << endl;
cin >> x ;
container.ResizeVek1(x);
cout << "Введiть розмiр вектора 2" << endl;
cin >> x ;
container.ResizeVek2(x);
Show(container);
}
void ResizeMatrix1(TWOTYPED& container)
{
int x, y;
cout << "Введiть розмiри матрицi 1" << endl;
cin >> x >> y;
container.setMatrix1Size(x, y);
Show(container);
}
void ResizeVector1(TWOTYPED& container)
{
int x;
cout << "Введiть розмiр вектора 1" << endl;
cin >> x ;
container.ResizeVek1(x);
Show(container);
}
void ResizeMatrix2(TWOTYPED& container)
{
int x, y;
cout << "Введiть розмiри матрицi 2" << endl;
cin >> x >> y;
container.setMatrix1Size(x, y);
Show(container);
}
void ResizeVector2(TWOTYPED& container)
{
int x;
cout << "Введiть розмiр вектора 2" << endl;
cin >> x ;
container.ResizeVek2(x);
Show(container);
}
void Show(const TWOTYPED& cont)
{
cout << cont;
}
3. Тестування можливостей класу за допомогою програми тестування
Рисунок 3.1. — Приклад тестування розробленого класу. Генерування випадкових векторів і матриць
Рисунок 3.2. — Інший приклад тестування розробленого класу.