Классы для использования Vector как стандартный контейнер.

Рубрика: C++, Дата: 10 May, 2013, Автор:

Напишите такие классы, чтобы Vector из 16.2.1 и Vector из 16.2.2 могли использоваться как стандартные контейнеры.

В общем решил я не мучить мозги, а просто написал класс Vector добавил туда методы примерно такие как у стандартного класса std::vector да и все. По условию задачи написано напишите такие классы, то есть нужно еще видимо и класс Iterator создать, что бы можно было использовать как итератор, но я решил этого не делать.

Вообщем от код самого класса Vector без класса Iterator. Хотя фиг его знает мб и дописать Iterator? Нет наверно не буду я себе жизнь усложнять, короче код:

//klacc kak std::vector
#include <iostream>
using std::cout;
using std::endl;

class Vector
{
	int siz;
	int* mass;

public:
	//class icklyuchenii
	class out_of_range{};

	//konctrykotr preobrazovani9
	Vector(int s):siz(s){mass=new int[s];}
	
	//konctryktor kopirovani9
	Vector(Vector& v):siz(v.siz)
	{
		mass=new int[v.siz];
		for(int i=0;i<siz;i++)
			mass[i]=v[i];
	}
	
	//vozvrat razmera size
	int size(){return siz;}

	//doctyp bez proverki
	int& operator[](int i){return mass[i];}
	const int& operator[](int i)const{return mass[i];}

	//doctyp c proverkoi
	int& at(int i)
	{
		if(i>=0&&i<siz)
			return mass[i];
		else
			throw out_of_range();
	}

	const int& at(int i)const
	{
		if(i>=0&&i<siz)
			return mass[i];
		else
			throw out_of_range();
	}

	//front() vozvrat pervogo elementa
	int& front(){return mass[0];}
	const int& front()const {return mass[0];}

	//vozvrat poclednego elementa
	int& back(){return mass[siz-1];}
	const int& back()const {return mass[siz-1];}

	//begin()
	int* begin(){return mass;}
	//end()
	int* end(){return mass+siz;}

	//ctekovue operacii
	//dobavlenie v konec
	void push_back(const int& x)
	{
		siz=siz+1;
		int* yk=new int[siz];
		for(int i=0;i<siz-1;i++)
			yk[i]=mass[i];

		int* del=mass;
		mass=yk;
		
		delete del;//vucvobojdenie pam9ti
		mass[siz-1]=x;
	}

	//vuvod Vector
	void print()
	{
		for(int i=0;i<siz;i++)
			cout <<mass[i]<<' ';
		cout <<endl;
	}

	//ydalenie poclednego elementa
	void pop_back()
	{
		if(siz==0)
			throw out_of_range();

		siz-=1;
		int* yk=new int[siz];//vudel9em mecto pod novui macciv
		for(int i=0;i<siz;i++)
		{
			yk[i]=mass[i];
		}

		int* del=mass;
		mass=yk;
		delete del;//ocvobojdenie pam9ti
	}

	//operacii xarakternue dl9 cpickov

	int* insert(int* ptr, int znach)
	{
		siz+=1;
		int* yk=new int[siz];
		//poick mecta
		for(int i=0,j=0;j<siz;i++,j++)
		{
			if((mass+i)==ptr)
			{
				//naideno mecto dl9 vctavki
				yk[j]=znach;
				ptr=yk+j;
				i--;
			}
			else
			{
				yk[j]=mass[i];
			}
		}
		int* del=mass;
		mass=yk;
		delete del;
		return ptr;
	}

	int* erase(int* ptr)
	{
		siz-=1;
		int* yk=new int[siz];
		//poick elementa dl9 ydaleni9
		for(int i=0,j=0;i<siz+1;i++,j++)
		{
			if((mass+i)==ptr)
			{
				ptr=yk+j;
				j--;
				continue;
			}
			else
			{
				yk[j]=mass[i];
			}
		}

		int* del=mass;
		mass=yk;
		delete del;
		return ptr;
	}
};

int main()
{
	Vector vec(5);
	cout <<vec.size()<<endl;
	
	//proverka operator[]
	for(int i=0;i<vec.size();i++)
		vec[i]=i;
	for(int i=0;i<vec.size();i++)
		cout <<"vec["<<i<<"]= "<<vec[i]<<endl;

	//proverka at()
	try
	{
		for(int i=0;i<6;i++)
			cout <<"vec.at("<<i<<")= "<<vec.at(i)<<endl;
	}
	catch(Vector::out_of_range& e)
	{
		cout <<"out_of_range"<<endl;
	}

	//proverka front()
	cout <<"vec.fron()= "<<vec.front()<<endl;
	//proverka back()
	cout <<"vec.back()= "<<vec.back()<<endl;

	//proverka konctryktora kopii
	Vector vec1(vec);
	for(int i=0;i<vec1.size();i++)
		cout <<"vec1["<<i<<"]= "<<vec1[i]<<endl;

	//proverka begin() i end()
	cout <<"vec.begin()= "<<*vec.begin()<<endl;
	cout <<"vec.end()= "<<vec.end()<<endl;
	//vce ok rabotaet
	
	//proverka push_back()
	cout <<"vec.size()= "<<vec.size()<<endl;
	vec.print();
	vec.push_back(3);
	cout <<"vec.size()= "<<vec.size()<<endl;
	vec.print();

	//proverka pop_back()
	cout <<"vec.size()= "<<vec.size()<<endl;
	vec.print();
	vec.pop_back();
	cout <<"vec.size()= "<<vec.size()<<endl;
	vec.print();

	vec.pop_back();
	cout <<"vec.size()= "<<vec.size()<<endl;
	vec.print();

	vec.pop_back();
	cout <<"vec.size()= "<<vec.size()<<endl;
	vec.print();

	//proverka insert()
	vec.insert(vec.begin(), 44);
	vec.print();

	//proverka erase()
	vec.erase(vec.begin());
	vec.print();
	vec.erase(vec.begin());
	vec.print();

	return 0;
}

[youtube]http://www.youtube.com/watch?v=Et6v0HgieUI[/youtube]

 

rss