Lab 17

Run Settings
LanguageC++
Language Version
Run Command
#include <iostream> using namespace std; class MyIntVector { //открытые методы класса (открытые функции-члены, интерфейс) public: //Конструктор инициализирует поля объекта MyIntVector (){ length=0; capacity=1, dataPointer=new int[1]; } MyIntVector (const MyIntVector &other){ //return other; length=other.Length(); capacity=other.Capacity(); dataPointer=new int[capacity]; for (int i=0;i<length;i++){ dataPointer[i]=other[i]; } } MyIntVector &operator= (const MyIntVector &other){ length=other.Length(); capacity=other.Capacity(); dataPointer=new int[capacity]; for (int i=0;i<length;i++){ dataPointer[i]=other.At(i); } return *this; } const int &At (int index) const { return dataPointer [index]; } ~MyIntVector (){//Пользовательсий деструктор free(dataPointer); } void PushBack (int newElement){ //Метод добавляет новый элемент в конец вектора и увеличивает логическую длину на 1 dataPointer[length]=newElement; length++; UpCapacity(length+1); } int &operator[] (int index) const{ //Оператор получения ссылки на элемент вектора return dataPointer[index]; } bool IsEmpty () const{return (length==0?true:false);} //Метод возвращает true, если логический размер равен 0 int Length () const { return length; }//Метод возвращает логическую длину int Capacity () const {return capacity;} //Метод возвращает физическую длину private: //реализация //закрытые методы класса (закрытые функции-члены) void UpCapacity (int newCapacity){ //Метод увеличения размера блока памяти if (newCapacity>capacity) { int *newPointer=new int[newCapacity]; for (int i=0;i<length;i++){ newPointer[i]=dataPointer[i]; } dataPointer=newPointer; } } //поля класса (данные-члены) int length; //текущее логическое количество элементов вектора (логическая длина) int capacity; //количество элементов динамического блока памяти (физическая длина) int *dataPointer; //указатель на динамический блок памяти }; void InputMyIntVector (MyIntVector &inVector, int n){ for (int i=0;i<n;i++){ int x; cin>>x; inVector.PushBack(x); } } void OutputMyIntVector (const MyIntVector &outVector){ const int n=outVector.Length(); for (int i=0;i<n;i++){ cout<<outVector[i]<<" "; } cout<<endl; } template <class TypeOfElement> class MyVector { //открытые методы класса (открытые функции-члены, интерфейс) public: //Конструктор инициализирует поля объекта MyVector (){ length=0; capacity=1, dataPointer=new TypeOfElement[1]; } MyVector (const MyIntVector &other){ length=other.Length(); capacity=other.Capacity(); dataPointer=new TypeOfElement[capacity]; for (int i=0;i<length;i++){ dataPointer[i]=other[i]; } } MyVector(TypeOfElement inputArray[], int inLength){ SetSize(inLength); for (int i=0;i<inLength;i++){ dataPointer[i]=inputArray[i]; } } MyVector &operator= (const MyIntVector &other){ //return other; if (this == &other) { return *this; } length=other.Length(); capacity=other.Capacity(); //cout<<length<<" "<<capacity<<" "<<endl; dataPointer=new TypeOfElement[capacity]; for (int i=0;i<length;i++){ dataPointer[i]=other[i]; } //OutputMyVector(*this); return *this; } const int &At (int index) const { return dataPointer [index]; } ~MyVector (){//Пользовательсий деструктор free(dataPointer); } void PushBack (TypeOfElement newElement){ //Метод добавляет новый элемент в конец вектора и увеличивает логическую длину на 1 dataPointer[length]=newElement; length++; UpCapacity(length+1); } TypeOfElement &operator[] (int index) const{ //Оператор получения ссылки на элемент вектора return dataPointer[index]; } bool IsEmpty () const{return (length==0?true:false);} //Метод возвращает true, если логический размер равен 0 int Length () const { return length; }//Метод возвращает логическую длину int Capacity () const {return capacity;} //Метод возвращает физическую длину void SetSize (int n) { length=n; UpCapacity(length+1); } MyVector operator+ (const MyVector &left) const { MyVector <TypeOfElement> res(left); //OutputMyVector(*this); //(res); int len_old=res.Length(); //cout<<len_old<<endl; res.SetSize(len_old+length); //cout<<res.Length()<<endl; for (int i=len_old;i<res.Length();i++){ res[i]=dataPointer[i-len_old]; //cout<<res[i]<<" "; } //cout<<endl; //OutputMyVector(res); return res; } private: //реализация //закрытые методы класса (закрытые функции-члены) void UpCapacity (int newCapacity){ //Метод увеличения размера блока памяти if (newCapacity>capacity) { TypeOfElement *newPointer=new TypeOfElement[newCapacity]; for (int i=0;i<length;i++){ newPointer[i]=dataPointer[i]; } dataPointer=newPointer; } } //поля класса (данные-члены) int length; //текущее логическое количество элементов вектора (логическая длина) int capacity; //количество элементов динамического блока памяти (физическая длина) TypeOfElement *dataPointer; //указатель на динамический блок памяти }; template <typename TypeOfElement> void InputMyVector (MyVector <TypeOfElement> &inVector, int n){ inVector.SetSize(n); for (int i=0;i<n;i++){ //TypeOfElement x; cin>>x; //inVector.PushBack(x); cin>>inVector[i]; } } template <typename TypeOfElement> void OutputMyVector (const MyVector <TypeOfElement> &outVector){ const int n=outVector.Length(); for (int i=0;i<n;i++){ cout<<outVector[i]<<" "; } cout<<endl; } template <class MyType> void MySwap (MyType &element1, MyType & element2) { MyType element3 = element1; element1 = element2; element2 = element3; } /*template <typename TypeOfElement> MyVector <TypeOfElement> operator+ (const MyVector <TypeOfElement> &first, const MyVector <TypeOfElement> &second) { int len_first=first.Length(); int len_sec=second.Length(); MyVector <TypeOfElement> res(first); //res->SetSize(len_first+len_sec); for (int i=len_first;i<len_first+len_sec;i++){ res.PushBack(second[i]); } return res; }*/ int main() { /*MyIntVector *v=new MyIntVector(); int n; cin>>n; InputMyIntVector(*v,n); MyIntVector *w=new MyIntVector(); w=v; //InputMyIntVector(*w,n); //OutputMyIntVector(*v); //OutputMyIntVector(*w); //cout<<a<<' '<<b<<endl; char a='a',b='b'; MySwap(a,b); cout<<a<<" "<<b<<endl;*/ int n; cin>>n; //MyVector <char> chars,letters,all; MyVector <char> *chars=new MyVector <char> (); InputMyVector(*chars,n); MyVector <char> *letters=new MyVector <char> (); //letters=chars; InputMyVector(*letters,n); //MySwap(chars,letters); MyVector <char> *all = new MyVector <char>(*letters+*chars); //OutputMyVector(*all); //all=letters; //OutputMyVector(*all); //OutputMyVector(*chars); //OutputMyVector(*letters); OutputMyVector(*all); /*int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; MyVector<int> vec(a, 10); OutputMyVector(vec);*/ return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines