Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.235.196] |
|
Сообщ.
#1
,
|
|
|
template<class T> inline void copy_line(T *In, const T *Out, size_t size) { for ( int i=0; i != size; i++ ) *In++=*Out++; } template<class T> class array2d { T *body; int x_size, y_size; public: array2d(): body(0), x_size(0), y_size(0) {} array2d(const int px_size,const int py_size): x_size(px_size), y_size(py_size) { body = new T[ px_size*py_size ]; } ~array2d() { delete [] body; } inline int get_x() const {return x_size;} inline int get_y() const {return y_size;} void resize(const int px_size,const int py_size) { if ( body != 0 ) { const int old_size=x_size*y_size; T *tmp = new T[ old_size ]; copy_line(tmp, body, old_size); delete [] body; body = new T[ px_size*py_size ]; int row_size; if ( x_size > px_size ) row_size = px_size; else row_size = x_size; if ( y_size > py_size ) y_size=py_size; for ( int i=0; i != y_size; i++ ) copy_line(body+px_size*i, tmp+x_size*i, row_size); x_size = px_size; y_size = py_size; delete [] tmp; } else { x_size = px_size; y_size = py_size; body = new T[ x_size*y_size*sizeof(T) ]; } } inline T* operator [] (const int& y) { return &body[x_size*y]; } }; По прозьбе Fantasist'а предствляю на Ваш святой суд! Таким массивом можно пользоваться как встренным, зато в производительности выигрывает в разы! |
Сообщ.
#2
,
|
|
|
Молодец! Только непонятно зачем ты при изменении размера создаёшь буфер tmp, в который копируешь текущий массив body, потом удаляешь текуший массив body, потом создаёшь новый body и копируешь в него элементы из буфера tmp? Не проще ли было создать новый массив, с копировать в него данные из body, потом body удалить и присвоить ему новый массив?
А совсем уже просто было бы воспользоваться функциями malloc, realloc и free. Цитата dimedrol, 27.04.04, 19:51 Таким массивом можно пользоваться как встренным, зато в производительности выигрывает в разы! .. у бейсика! |
Сообщ.
#3
,
|
|
|
Цитата Вот и приведи примеры использования. Объясни хоть чуть чуть. Иначе я пока что не могу считать этот исходник для ФАКа законченным. dimedrol Таким массивом можно пользоваться как встренным |
Сообщ.
#4
,
|
|
|
Цитата Leprecon, 18.08.04, 15:56 Вот и приведи примеры использования. Объясни хоть чуть чуть. Это ты у кого спросил? И о чём? |
Сообщ.
#5
,
|
|
|
Цитата О черт, ошибся с кнопкой цитаты Выделил текст у димидрола, а кнопку нажал твою Олег М, 18.08.04, 15:18 Это ты у кого спросил? И о чём? К нему конечно обращался. Все.. поправил. |
Сообщ.
#6
,
|
|
|
Будет сделано
|