С генерируйте 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] я не сделал, потому, что там почему то вылазит ошибка и не понятная, что за ошибка. Вообщем от код, что получился. Какой получился такой получился. Мб доделаю я на форуме создал тему с этой ошибкой мб кто то щарящий подскажет в чом ошибка. Ладоно пока что от вам код кокой есть:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
//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]