елемент у векторі і повернути його позицію{}
template<class T>
size_t Vector<T>::find(const T& value)
{
for (size_t i = 0; i < m_array.size(); ++i)
{
if (m_array[i] == value)
{
return i;
}
}
return 0;
}
//accumulate - накопичення суми або добутку{}
// 1(true) = сума 0(false) = добуток
template<class T>
T Vector<T>::accumulate(bool sum)
{
T accum;
if (sum)
{
accum = 0;
vector<T>::const_iterator iter;
for (iter = m_array.begin(); iter != m_array.end(); ++iter)
{
accum += *iter;
}
}
else
{
accum = 1;
vector<T>::const_iterator iter;
for (iter = m_array.begin(); iter != m_array.end(); ++iter)
{
accum *= *iter;
}
}
return accum;
}
//for_each - обробка елементів по наданій процедурі{}
template<class T>
void Vector<T>::for_each()
{
}
//max , min - пошук максимального та мінімального елементів{}
template<class T>
T Vector<T>::maximum()
{
T maxim = 0;
vector<T>::const_iterator iter;
maxim = *m_array.begin();
for (iter = m_array.begin() + 1; iter != m_array.end(); ++iter)
{
maxim = __max(*iter, maxim);
}
return maxim;
}
template<class T>
T Vector<T>::minimum()
{
T minmum = 0;
vector<T>::const_iterator iter;
minmum = *m_array.begin();
for (iter = m_array.begin() + 1; iter != m_array.end(); ++iter)
{
minmum = __min(*iter, minmum);
}
return minmum;
}
template<class T>
static bool UDgreater ( T elem1, T elem2 )
{
return elem1 > elem2;
}
//sort - упорядкування елементів у порядку зростання або зменшення.
template<class T>
void Vector<T>::sort(bool az)
{
if (az)
{
std::sort(m_array.begin(), m_array.end());
}
else
{
std::sort(m_array.begin(), m_array.end(), UDgreater<T>);
}
}
//swap - обмін значеннями з іншим вектором{}
template<class T>
void Vector<T>::swap(Vector& rhs)
{
m_array.swap(rhs.m_array);
}
//доступу до елемента, символ "[]" {}
template<class T>
T& Vector<T>::operator [] (size_t offset)
{
return *(m_array.begin() + offset);
}
template<class T>
const T& Vector<T>::operator [] (size_t offset)const
{
return *(m_array.begin() + offset);
}
//присвоєння, символ "=" {}
template<class T>
Vector<T>& Vector<T>::operator = (const Vector& rhs)
{
if (this == &rhs)
{
return *this;
}
m_array.assign(rhs.m_array.begin(), rhs.m_array.end());
return *this;
}
////конкатенації , символ "+" {}
Vector Vector::operator + (Vector& rhs)
{
Vector temp;
temp.m_array.insert(temp.m_array.begin(), m_array.begin(), m_array.end());
temp.m_array.insert(temp.m_array.begin() + m_array.size(), rhs.m_array.begin(), rhs.m_array.end());
return temp;
}
//конкатенації і присвоєння, символ "+=" {}
template<class T>
void Vector<T>::operator += (const Vector& rhs)
{
Vector temp;
temp.m_array.insert(temp.m_array.begin(), m_array.begin(), m_array.end());
temp.m_array.insert(temp.m_array.begin() + m_array.size(), rhs.m_array.begin(), rhs.m_array.end());
*this = temp;
}
//введення із файлу, символи "<<" {}
template<class T>
ostream & operator << (ostream & output, const Vector<T> & vek)
{
output << "[" << vek.size() << "]( ";
for (size_t i = 0; i < vek.size(); i++)
{
output << vek[i] << " ";
}
output << ")" << endl;
return output;
}
//виведення у файл, символи ">>" {}
template<class T>
istream & operator >> (istream & input, Vector<T> & vek)
{
T inputValue;
input >> inputValue;
vek.push_back(inputValue);
return input;
}
//порівняння, символі "==" , "!=" .
template<class T>
bool Vector<T>::operator == (const Vector& rhs)
{
if (this == &rhs) return true;
if (m_array.size() != rhs.m_array.size())
{
return false;
}
for (size_t i = 0; i < m_array.size(); ++i)
{
if (m_array[i] != rhs.m_array[i]) return false;
}
return true;
}
template<class T>
bool Vector<T>::operator != (const Vector& rhs)
{
return !(operator == (rhs));
}
Лістинг 4. Файл VectorMain.cpp — Головна програма
#include "stdafx.h"
#include <windows.h>
#include <strstream>
#include <fstream>
#include "Vector.h"
#include "Vector.cpp"
typedef int type1;
typedef float type2;
typedef char type3;
enum State {intV, floatV, stringV};
Vector<type1> vek1;
Vector<type2> vek2;
Vector<type3> vek3;
State curState;
void EnterValue();
void Delete();
void Erase();
void Find();
void Insert();
void Max();
void Min();
void Sorting();
void Show();
#define CHOISE_(a1,a2,a3) \
switch(curState) {\
case intV:\
a1;break;\
case floatV:\
a2;break;\
case stringV:\
a3;break; }
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, ".1251");
::SetConsoleTitle(OEM(STR::Title));
while (true)
{
cout << "З яким типом Вектора Ви бажаєте працювати ?"
<< "\n\t1 - цiлочисельний (int)"
<< "\n\t2 - з плаваючою комою (float)"
<< "\n\t3 - символьний (char)"
<< "\n\t0 - вихiд" << endl;
char type;
cin >> type;
if (type == '1') { curState = intV; break; }
else if (type == '2') { curState = floatV; break; }
else if (type == '3') { curState = stringV; break; }
else if (type == '0') return -1;
}
try
{
cout << "Введiть одну з можливих команд\n"
<< "\t'+' - додати значення\n\t'-' - видалити значення\n"
<< "\t'e' - видалити всi\n\t'f' - знайти\n\t'i' - вставити на позицiю\n"
<< "\t'>' - знайти максимум\n\t'<' - знайти мiнiмум\n\t's' - сортувати\n"
<< "\t'!' - вихiд" << endl;
char command;
for (;;)
{
cin >> command;
switch (command)
{
case '+':
EnterValue();
break;
case '-':
Delete();
break;
case 'e':
Erase();
break;
case 'f':
Find();
break;
case 'i':
Insert();
break;
case '>':
Max();
break;
case '<':
Min();
break;
case 's':
Sorting();
break;
case '!':
return 0;
default:
Show();
}
command = 0;
}
}
catch (exception& e)
{
std::cout << OEM(MakeError(e.what()));
::MessageBox(0, (LPCSTR)e.what(), LPCSTR("Помилка виконання програми"), MB_ICONERROR);
return -1;
}
return 0;
}
void EnterValue()
{
type1 Val1;
type2 Val2;
type3 Val3;
cout << "Введiть значення" << endl;
CHOISE_(cin >> Val1, cin >> Val2, cin >> Val3);
CHOISE_(vek1.push_back(Val1), vek2.push_back(Val2),vek3.push_back(Val3));
Show();
}
void Delete()
{
CHOISE_(vek1.pop_back(), vek2.pop_back(),vek3.pop_back());
Show();
}
void Erase()
{
CHOISE_(vek1.erase(), vek2.erase(),vek3.erase());
Show();
}
void Find()
{
type1 Val1;
type2 Val2;
type3 Val3;
size_t offset;
cout << "Введiть значення" << endl;
CHOISE_(cin >> Val1, cin >> Val2, cin >> Val3);
CHOISE_(offset = vek1.find(Val1), offset = vek3.find(Val3),offset = vek3.find(Val3));
cout << "Позицiя = " << offset << endl;
Show();
}
void Insert()
{
type1 Val1;
type2 Val2;
type3 Val3;
size_t offset;
cout << "Введiть значення" << endl;
CHOISE_(cin >> Val1, cin >> Val2, cin >> Val3);
cout << "Введiть значення" << endl;
cin >> offset;
CHOISE_(vek1.insert(Val1, offset), vek2.insert(Val2, offset), vek3.insert(Val3, offset));
Show();
}
void Max()
{
type1 Val1;
type2 Val2;
type3 Val3;
CHOISE_(Val1 = vek1.maximum(), Val2 = vek2.maximum(), Val3 = vek3.maximum());
CHOISE_(cout << "Максимум = " << Val1 , cout << "Максимум = " << Val2, cout << "Максимум = " << Val3);
}
void Min()
{
type1 Val1;
type2 Val2;
type3 Val3;
CHOISE_(Val1 = vek1.minimum(), Val2 = vek2.minimum(), Val3 = vek3.minimum());
CHOISE_(cout << "Мiнiмум = " << Val1 , cout << "Мiнiмум = " << Val2, cout << "Мiнiмум = " << Val3);
}
void Sorting()
{
CHOISE_(vek1.sort(), vek2.sort(), vek3.sort());
Show();
}
void Show()
{
CHOISE_(cout << vek1, cout << vek2, cout << vek3);
}
Додаток Б
Основна програма (консольна версія)
// diplom.cpp : Створення класів для роботи з числовими векторами
// і матрицями
#include "classes.h" //класи вектор і матриця
#include <iostream>
#include <locale.h> //задання кодової таблиці
#include <conio.h> //робота з консоллю
using namespace std;
int main(void)
{
int n,m,p,q; //висота і ширина матриці
int action; //подія
int vsize; //розмір вектора
int pos, elem;
//Задання кодової таблиці для виводу тексту
setlocale(LC_ALL,".1251");
//Вибір необхідної операції
cout<<"Виберiть необхiдну операцiю: \n 1- робота з векторами;\n 2- робота з матрицями;\n 3- множення вектора на матрицю"<<endl;
cin>>action;
switch (action)
{
case 1:
{
//Задання розміру вектора
cout<<"Введiть розмiр вектора: ";
cin>>vsize;
//Створення об'єкта класу vector
vector v1(vsize);
//Введення елементів вектора
v1.InputVector(v1);
//Отриманий вектор
v1.PrintVector();
//Копія вектора
cout<<"Копiя вектора"<<endl;
vector v2=v1;
v1=v2;
v2.PrintVector();
cout<<"Розмiр вектора "<<v1.GetSize();
cout<<endl;
cout<<"Введiть елемент, який необхiдно додати до вектора";
cin>>elem;
v1.AddItem(elem);//Додавання елементу до вектора
v1.PrintVector();
cout<<"Розмiр вектора - "<<v1.GetSize()<<endl;
cout<<"Введiть номер елемента,