Объемы памяти для трех стилей vector.

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

С генерируйте 10000 однородно распределенных на интервале от 0 до 1023 чисел и сохраните их в: а) стандартном библиотечном контейнере vector; b)контейнере Vector из параграфа 16.5.[7]; c)контейнере Vector из 16.5[9]. Во всех случаях вычислите среднее арифметическое элементов контейнеров. Засеките время. Оцените, измерьте и сравните между собой объемы потребления памяти для трех этих стилей вектора.

Мне прям щас хочется сделать эту задачку. Задачка очень простенькая. Тупо создать вектор и посчитать средние арифметическое. Наверно щас и сделаю все таки. Тут одни трудности будут с подсчетом времени. И с потреблением памяти. Ладно щас еще я вам ссылки скину на посты 16.5.[7] это: http://www.kselax.ru/2013/05/klassy-vector-list-i-itor/  и ссылочку на 16.5.[9] это: http://www.kselax.ru/2013/05/klassy-container-vector-i-list/ . Там вы можете посмотреть на эти вектора с помощью которых нам предлагается сделать данную задачку. Ладно я наверно для начала пойду по очереди делать. Сначала для стандартного вектора посчитаю замеряю замеряю память и создам. Затем для двоих остальных. Так я думаю будет проще.

Посмотреть как можно время замерять вы можете по ссылке: http://www.kselax.ru/2013/05/zameryat-vremya-raboty-programmy/ 

Вообщем сделал я но только для двоих для Vector из 16.5.[9] я не сделал, потому, что там почему то вылазит ошибка и не понятная, что за ошибка.  Вообщем от код, что получился. Какой получился такой получился. Мб доделаю я на форуме создал тему с этой ошибкой мб кто то щарящий подскажет в чом ошибка. Ладоно пока что от вам код кокой есть:

//programma proizvoditel6nocti
#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
#include <cstdlib>
using std::rand;
using std::srand;
#include <ctime>
using std::time;

//Vector iz 16.5.[7]
template<class T>
class Vector//optimal6nui
{
public:
	T mass[10000];
	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;}
	//...
};


//Vector iz 16.5.[9]
struct Object
{
	Object* pre;
	Object* next;
	//...
public:
	//konctryktor po ymolchaniyu
	Object():pre(0),next(0){}

	//virtual6nui dectryktor
	virtual ~Object(){};
};

class Container : public Object
{
public:
	struct Bad_op//klacc icklyuchenii
	{
		const char* p;
		Bad_op(const char* pp):p(pp){}
	};
	
	virtual void put(Object*){throw Bad_op("put");}
	virtual Object* get() {throw Bad_op("get");}
	virtual Object*& operator[](int){throw Bad_op("[]");}
	
	//...
};

class Vector1 : public Container
{
	Object* tek;//pervui element;
	int size;//razmer
public:
	//konctryktor preobrazovani9
	Vector1(int i):size(i),tek(0){}

	//dabavit6 elementu
	void put(Object* a)
	{
		//cout <<"Mu v put"<<endl;
		if(tek==0)
		{
			//cout <<"vector pyct"<<endl;
			if(size!=0)
				tek=a;
		}
		else
		{
			//cout <<"vector ect6 elementu"<<endl;
			Object* temp=tek;
			tek->next=a;
			a->pre=tek;
			tek=a;
		}
	}

	//indekc
	Object*& operator[](int a)
	{
		//cout <<"Mu cdec6"<<endl;
		if(a==0)
			return tek;
		else
		{
			if(a>0&&a<size)
			{
				int count=0;
				Object* t = opHelper(a,tek->pre,count);
				//cout <<"t= "<<t<<endl;
				return t;
			}
		}
		//return 0;
	}

	//opHelper
	Object*& opHelper(int& a, Object* Ptr,int& count)
	{
		if(Ptr!=0&&++count==a)
		{
			//cout <<"a= "<<a<<" cout= "<<count<<endl;
			//cout <<"MU TYT"<<endl;
			//exit(1);
			//cout <<"Ptr= "<<Ptr<<endl;
			return Ptr;
		}
		else if(Ptr!=0&&count!=a)
			opHelper(a,Ptr->pre,count);
		else
		{
			//cout <<"element ne cozdan"<<endl;
			exit(1);
		}
	}
	//...
};

class elem : public Object
{
public:
	int data;
	elem(int a):data(a){}
};

int main()
{

	clock_t begin, end;
    double time_spent;
    begin = clock();

	vector<int> vec;
	srand(time(0));
	for(int i=0;i<10000;i++)
	{
		vec.push_back(rand()%1024);
		//cout <<vec[i]<<' ';
	}
	//racchitaem crednee arifmeticheckoe
	double sum=0;
	double sredV=0;
	for(int i=0;i<vec.size();i++)
	{
		sum+=vec[i];
	}
	sredV=sum/10000;
	cout <<"sredV= "<<sredV<<endl;
	cout <<endl;
	cout <<"vec.capacity()= "<<vec.capacity()<<endl;
    
    end = clock();
    time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
    cout<<"Executed in "<<time_spent;
	
	cout <<endl<<endl<<endl;

	//provedem racchet dl9 Vector iz 16.5.[7]
	begin=0;
	end=0;
    time_spent=0;
    begin = clock();

	Vector<int> vec1(10000);
	for(int i=0;i<vec1.getSize();i++)
	{
	//	cout <<"vec["<<i<<"]= "<<vec[i]<<endl;
		vec1[i]=rand()%1024;
	}
	//podcchet crednego arifmeticheckogo
	sum=0;
	sredV=0;
	for(int i=0;i<10000;i++)
		sum+=vec1[i];

	sredV=sum/10000;
	cout <<"cred dl9 Vectr 16.5.[7]= "<<sredV<<endl;
	cout <<"pam9t6 = "<<sizeof(vec1)<<endl;

	end = clock();
    time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
    cout<<"Executed in "<<time_spent;

	cout <<endl<<endl<<endl;
	

	/*//proizvedem podcchet dl9 Vector iz 16.5.[9]
	Vector1 vec2(10000);
	for(int i=0;i<10000;i++)
	{
		elem* a= new elem(rand()%1023);
		//cout <<a.data<<endl;
		//a=(rand()%1024);
		vec2.put(a);
		if(i==9999)
			cout <<"i= "<<i<<endl;
	}
	//elem* pr=dynamic_cast<elem*>(vec2[7000]);
	//cout <<pr->data<<endl;
	//exit(1);
	//podcchet crednego arifmeticheckogo
	double sum=0;
	double sredV=0;
	for(int i=0;i<10000;i++)
	{
		//elem* pr=dynamic_cast<elem*>(vec2[i]);
		cout <<i<<endl;
		sum+=dynamic_cast<elem*>(vec2[i])->data;
	}*/

	return 0;
}

Я думаю без пояснения здесь и так все ясно.

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

rss