Russian Qt Forum
Ноябрь 26, 2024, 10:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Массивы переменной длины.  (Прочитано 10434 раз)
Aleksey_Zh
Гость
« : Октябрь 28, 2009, 10:06 »

Перед тем как перебраться на Qt я долгое время программировал на Delphi. Там есть очень полезная и интересная вещь - массивы переменной длины. Всегда можно добавить или удалить элемент из массива. Есть ли что-нибудь аналогичное в Qt? Кто знает - подскажите
Записан
zenden
Гость
« Ответ #1 : Октябрь 28, 2009, 10:19 »

http://doc.trolltech.com/4.5/qvector.html
Записан
Aleksey_Zh
Гость
« Ответ #2 : Октябрь 28, 2009, 10:30 »

Посмотрел. Если ничего не путаю - это одномерный массив, а с многомерностью что - нибудь есть?
Записан
set
Гость
« Ответ #3 : Октябрь 28, 2009, 10:55 »

нет... как в паскале тут не прокатит...

стандартными средствами можно только размерность массива задать переменной (ито в случае многомерного массива только послежнюю расзмерность)...

а вот нестандартным можно...  в сети есть куча библиотек - подключай и пользуйся...

нативные массивы быстрее - самодельные и STL'евские удобнее..

вобще конкретно для си, массив, это всегда строка со списком адресов элементов. Даже если ты работаеш с многомерным массивом - ты работаеш со строкой просто позиция элемента a[i,j] массива a[N,M] (грубо говоря) вычисляется как a[i*N+j]... делайте выводы...
Записан
Aleksey_Zh
Гость
« Ответ #4 : Октябрь 28, 2009, 11:02 »

Спасибо. Быстродействие не критично. Можно немного поподробнее - что за нативные массивы и что за STL?
Записан
whirlwind
Гость
« Ответ #5 : Октябрь 28, 2009, 11:39 »

Посмотрел. Если ничего не путаю - это одномерный массив, а с многомерностью что - нибудь есть?
как-то вроде
Код:
    QList< QList<int> > ttt;
    int ti = ttt[2][3];
Записан
set
Гость
« Ответ #6 : Октябрь 28, 2009, 12:52 »

Можно немного поподробнее - что за нативные массивы и что за STL?
http://cplus.h1.ru/cplus/bookc/bookc/book010.htm
http://www.sgi.com/tech/stl/
Записан
Norgat
Гость
« Ответ #7 : Октябрь 28, 2009, 21:20 »

вобще конкретно для си, массив, это всегда строка со списком адресов элементов. Даже если ты работаеш с многомерным массивом - ты работаеш со строкой просто позиция элемента a[i,j] массива a[N,M] (грубо говоря) вычисляется как a[i*N+j]... делайте выводы...

немного не так... при работе с многомерным массивом добавляется массив указателей на строки, элементы которых уже являются значимыми...

поэтому с точки зрения синтаксиса:

Код:
int a[n][k];
...

a[i*n + j];

правильно, но с точки зрения адресации в памяти, нет.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Октябрь 29, 2009, 10:49 »

Ну особо страдать из-за "отсутствия 2-х мерного массива" не приходится - это легко решается операторами

Код:
template <class T>
struct MyArray {
  MyBitmap( int rows, int cols ) : mRows(rows), mCols(cols) { mData.reserve(mRows * mCols); }

  T & at( int row, int col ) { return mData[row * mCols + col];
  const T & at( int row, int col ) const { return mData[row * mCols + col]; }

// data members
  int mRows, mCols;
  QVector <T> mData;
};
Записан
Winstrol
Гость
« Ответ #9 : Октябрь 29, 2009, 14:25 »

Ну особо страдать из-за "отсутствия 2-х мерного массива" не приходится - это легко решается операторами
Код:
 mData.reserve(mRows * mCols);
resize.
Если у типов присутсвует деструктор, то он не вызовется для элементов при разрушении массива.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Октябрь 29, 2009, 14:41 »

Ну особо страдать из-за "отсутствия 2-х мерного массива" не приходится - это легко решается операторами
Код:
 mData.reserve(mRows * mCols);
resize.
Если у типов присутсвует деструктор, то он не вызовется для элементов при разрушении массива.
Ну то дело хозяйское как строить конструктор и нужно ли торопиться с инициализацией всего массива. С reserve деструкторы не позовутся но и конструкторов не будет. Заметим также что несложно добавить удаление строк/столбцов с сохранением остальных данных
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.062 секунд. Запросов: 23.