Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Портфолио
  • Услуги
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

Шаблон контейнер стандантного vector.

Posted on 10 Май, 201312 Май, 2013 by admin

Напишите шаблон, реализующий контейнер с теми же функциями-членами и теми же типами, что и стандартный vector, для существующего (нестандартного) контейнерного типа. Не модифицируйте при этом существующий контейнерный тип. Как вы поступите с его функциональностью, не совпадающей со стандартной?

В общем от шаблон который у меня получился. Я просто все сделал по быстрому не долго разбираясь с итераторами, что да как, просто втулил по быстрому и все.

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
226
227
228
229
230
231
232
233
//klacc kak std::vector
//modificiryem v wablon
#include <iostream>
using std::cout;
using std::endl;
 
template <typename T>
class Vector
{
int siz;
T* mass;
 
public:
typedef T* iter;
typedef T& value;
 
//class icklyuchenii
class out_of_range{};
 
//konctrykotr preobrazovani9
Vector(int s):siz(s){mass=new T[s];}
 
//konctryktor kopirovani9
Vector(Vector& v):siz(v.siz)
{
mass=new T[v.siz];
for(int i=0;i<siz;i++)
mass[i]=v[i];
}
 
//vozvrat razmera size
int size(){return siz;}
 
//doctyp bez proverki
value operator[](int i){return mass[i];}
const T& operator[](int i)const{return mass[i];}
 
//doctyp c proverkoi
value at(int i)
{
if(i>=0&&i<siz)
return mass[i];
else
throw out_of_range();
}
 
const value at(int i)const
{
if(i>=0&&i<siz)
return mass[i];
else
throw out_of_range();
}
 
//front() vozvrat pervogo elementa
value front(){return mass[0];}
const T& front()const {return mass[0];}
 
//vozvrat poclednego elementa
value back(){return mass[siz-1];}
const T& back()const {return mass[siz-1];}
 
//begin()
iter begin(){return mass;}
//end()
iter end(){return mass+siz;}
 
//ctekovue operacii
//dobavlenie v konec
void push_back(const T& x)
{
siz=siz+1;
T* yk=new T[siz];
for(int i=0;i<siz-1;i++)
yk[i]=mass[i];
 
T* 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;
T* yk=new T[siz];//vudel9em mecto pod novui macciv
for(int i=0;i<siz;i++)
{
yk[i]=mass[i];
}
 
T* del=mass;
mass=yk;
delete del;//ocvobojdenie pam9ti
}
 
//operacii xarakternue dl9 cpickov
 
iter insert(iter ptr, T znach)
{
siz+=1;
T* yk=new T[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];
}
}
T* del=mass;
mass=yk;
delete del;
return ptr;
}
 
iter erase(iter 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];
}
}
 
T* del=mass;
mass=yk;
delete del;
return ptr;
}
};
 
int main()
{
Vector<int> 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<int>::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<int> 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;
}

«Как вы поступите с его функциональностью, не совпадающей со стандартной?» Да не как подумаешь не совпадает, зато можно и более лучшую функциональность добавить. Так что есть и свои плюсы, хотя минусов больше, лучше юзать готовое чем самому велосипед создавать.

Добавить комментарий Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • MFC (39)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (28)

Метки

Ajax bootstrap CLI FormData GDlib google Invisible reCAPTCHA media MFC php repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • HollyFrunk к записи Программка для заполнения форума на vBulletin 3.8.7
  • rwerwer к записи google Invisible reCAPTCHA Установка
  • ertert к записи google Invisible reCAPTCHA Установка
  • FrolovAlexbit к записи Программка для заполнения форума на vBulletin 3.8.7
  • Egor к записи C++ прочитать все имена файлов из директории.
©2019 Kselax.ru Theme by ThemeGiant