Классы Vector, List и Itor.

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

Завершите классы Vector, List и Itor из параграфа 16.2.1

Ладно почитаем пока, что там за вектора.

Да сказать честно не такая и простая задачка как оказалось, долго я над ней мучился, но все таки добил. Опять же проблемы у меня возникли из за того что я щас использую visual studio и я пока в нем не сильно шарю, что куда да как и что за ошибки вылазят для меня пока, что в диковину, ну да ладно, щас я вам приведу код, просто готовый код привету и все. Вот сам код:

 

//dorabotka klaccov Vector List i Itor
#include <iostream>
using std::cout;
using std::endl;
#include <cstdlib>
using std::exit;

template<class T>
class Vector//optimal6nui
{
public:
	T mass[30];
	int size;
	explicit Vector(size_t n):size(n){}//inicializaci9 n ob6ektami co znacheniem T()

	T& operator[](size_t n)//indekcaci9
	{
		if(n<=size&&n>=0)
			return mass[n];
	}

	T getSize(){return size;}
	//...
};

template<class T>
class List//optimal6nui
{
public:
	class Link
	{
	public:
		Link* prev;
		Link* next;
		T data;
		Link(T val):data(val),prev(0),next(0){}
	};

	Link* tek;

	List():tek(0){}//pervonachal6no pyctoi
	void put(T a)//pomectit6 pered tekychim elementov
	{
		if(tek==0)
		{
			cout <<"cpicok pyct"<<endl;
			//dobavl9em element
			tek=new Link(a);
		}
		else
		{
			cout <<"ect6 elementu"<<endl;
			//dobavl9em element
			Link* prom=tek;//adrec tekychego elementa
			tek=new Link(a);
			prom->next=tek;
			tek->prev=prom;			
		}
	}
	T* get()//polychit6 tekychii element
	{
		return &tek->data;
	}
	//...

};

template<class T> class Itor //obchii interfaic (abctraktnui klacc paragraf 2.5.4. paragraf 12.3)
{
public:
//return 0 dl9 indikacii cocto9ni9 "elementov bol6we net"

	virtual T* first()=0;//ykazatel6 na pervui element
	virtual T* next()=0;//ykazatel6 na cledyyuchii element
};

template<class T>
class Vector_itor : public Itor<T>//realizaci9 Vector
{
	Vector<T>&v;//ccukla na vektor
	size_t index;//index tekychego elementa

public:
	Vector_itor(Vector<T>&vv):v(vv),index(0){}
	T* first(){return (v.getSize())?&v[index=0]:0;}
	T* next(){return (++index<v.getSize())?&v[index]:0;}
	bool end(){return (index<v.getSize())?1:0;}
	//razumenovanie
	T& operator*(){return v[index];}
};

template<class T>
class List_itor : public Itor<T>//realizaci9 List
{
	List<T> &lst;
	typename List<T>::Link* p;//ykazuvaet na tekychii element
	int flag;

public:
	List_itor(List<T>& l):lst(l),flag(1){}
	T* first()
	{
		p=lst.tek;
		flag=1;
		//cout <<"p->data= "<<p->data<<endl;
		return &p->data;
	}
	T* next()
	{
		if(p->prev!=0)
		{
			p=p->prev;
			//cout <<"p->data= "<<p->data<<endl;
			return &p->data;
		}
		else
		{
			//p=0;
			flag=0;
			return 0;
		}
	}

	//peregryzka operator*()
	T& operator*()
	{
		return p->data;
	}

	//end
	bool end()
	{
		//cout <<"flag= "<<flag<<endl;
		if(flag!=0)
			return true;

		return false;
	}
};

int main()
{
	Vector<int> v(5);
	for(int i=0;i<5;i++)
	{
		v[i]=i;
		cout <<v[i]<<' ';
	}
	cout <<endl;

	List<int> L;
	int s;
	L.put(3);
	L.put(4);
	s=*(L.get());
	cout <<"s= "<<s<<endl;

	Vector_itor<int> it(v);

	//vuvod vektora v cikle c pomochyu iteratorov
	for(it.first();it.end();it.next())
		cout <<*it<<' ';
	cout <<endl;

	List_itor<int> itl(L);
	cout <<"itl.first()= "<<*(itl.first())<<endl;
	cout <<"itl.next()= "<<*itl.next()<<endl;
	cout <<"itl.next()= "<<itl.next()<<endl;
	cout <<"itl.next()= "<<itl.next()<<endl;
	//vuvod v cikle znacheni9 cpicka
	for(itl.first();itl.end();itl.next())
	{
		cout <<"*itl= "<<*itl<<endl;
	}
	cout <<endl;

	return 0;
}

Вообщем это как бы моделирование STL. Как бы мы создали вектор и лист, и используем итератор для работы с ними. Комментировать мне щас как то не сильно охота, тяжело мне далась эта задачка. Честно видимо в visual studio тяжело работать, а наверно я к ней просто не привык. В задаче было написано что она делается час, а я ее делал день. Чото я начал сомневаться в своем скиле. Мб он у меня упал? хз. Ладно буду дальше потихоньку делать, что бы не случилось. Да и настрой щас какой то фиговый стал.

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

rss