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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с двумерным массивом QVector  (Прочитано 10354 раз)
Roninsc2
Гость
« : Декабрь 31, 2014, 22:12 »

Добрый вечер! Всех с наступающим Новым Годом))

Собственно вопрос: мне надо создать двумерный массив интов.
Как я понимаю, это делается так:

QVector< QVector<int> > array;

Вопрос, как задать его размер? И как проводить с ним операции присваивания и изменения?
Скажем, мы идем 2-мя циклами. И изменяем массив с помощью at().
Т.е.:

for(int i = 0; i < 10; i++)
{
       for(int j = 0; j < 10; j++)
       {
               array.at(??) = 0;
       }
}

Или же.

int * data = array.data();

for(int i = 0; i < 10; i++)
{
       for(int j = 0; j < 10; j++)
       {
              data[?][?] = 0;
       }
}

Вот как-то так
Буду благодарен за помощь.
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Январь 01, 2015, 12:35 »

http://www.prog.org.ru/topic_27860_0.html
Записан
Roninsc2
Гость
« Ответ #2 : Январь 01, 2015, 18:57 »

Благодарю!
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #3 : Январь 01, 2015, 20:28 »

Благодарю!

Я бы не стал так всерьёз относиться к тем "статьям" 8Observer8а.. Особенно по части двумерных массивов.. (это, скорее, пример того, как делать не стоит..)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Hrundel
Гость
« Ответ #4 : Январь 01, 2015, 21:27 »

Благодарю!

Я бы не стал так всерьёз относиться к тем "статьям" 8Observer8а.. Особенно по части двумерных массивов.. (это, скорее, пример того, как делать не стоит..)

Поддерживаю.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Январь 02, 2015, 10:59 »

QVector< QVector<int> > array;
...
               array.at(??) = 0;
...
              data[?][?] = 0;
Лучше
Код
C++ (Qt)
QList < QVector<int> > array;
 
А обращение к эл-ту - просто
Код
C++ (Qt)
array[i][j]
т.е. как к обычному массиву.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Январь 02, 2015, 22:50 »

QList не лучше, сейчас тренд отказываться от него
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Январь 03, 2015, 08:43 »

QList не лучше, сейчас тренд отказываться от него
Мотивация впечатляет: "потому что так говорят" Улыбающийся Укажите первоисточник please. И кстати - а чем плох "вектор векторов"?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Январь 03, 2015, 11:41 »

Вот огромная статья, сравнивающая стл и Qt контейнеры. Минусы QList там описаны.
Вектор векторов ничем не плох, так как структура в памяти ничем не будет отличаться от той же в QList (размер вектора == sizeof(void *), он movable в терминологии Qt, следовательно, лист разместит сами вектора в ячейках массива)
А вот в Qt6 размер вектора может и поменяться - чтобы поддерживать векторные литералы (и не иметь оверхеда в виде фейкового ArrayData) надо data и size вынести из d_ptr. И тут QList будет уже давать оверхед по памяти.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Январь 03, 2015, 15:49 »

Вот огромная статья, сравнивающая стл и Qt контейнеры. Минусы QList там описаны.
Где "вот"  Непонимающий

Вектор векторов ничем не плох, так как структура в памяти ничем не будет отличаться от той же в QList (размер вектора == sizeof(void *), он movable в терминологии Qt, следовательно, лист разместит сами вектора в ячейках массива)
А вот в Qt6 размер вектора может и поменяться - чтобы поддерживать векторные литералы (и не иметь оверхеда в виде фейкового ArrayData) надо data и size вынести из d_ptr. И тут QList будет уже давать оверхед по памяти.
Все это справедливо, но зачем вдаваться в этот анализ? При структуре данных "массив массивов" разумно потратить чуть больше памяти на эл-ты первого уровня, зато намного выиграть в скорости удаления/вставки. Поэтому достаточно знать что QList не перемещает данные имеющиxся эл-тов.

Когда программист на С без затей пишет
Код:
int ** array = ...
Он ведь выделяет память для каждой строки, и имеет возможность их удалять, переставлять и.т.п. не трогая все остальные. Впрочем для пишущих статьи это почему-то неочевидно  Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #10 : Январь 03, 2015, 17:31 »

Вот огромная статья, сравнивающая стл и Qt контейнеры. Минусы QList там описаны.
Где "вот"  Непонимающий

Вектор векторов ничем не плох, так как структура в памяти ничем не будет отличаться от той же в QList (размер вектора == sizeof(void *), он movable в терминологии Qt, следовательно, лист разместит сами вектора в ячейках массива)
А вот в Qt6 размер вектора может и поменяться - чтобы поддерживать векторные литералы (и не иметь оверхеда в виде фейкового ArrayData) надо data и size вынести из d_ptr. И тут QList будет уже давать оверхед по памяти.
Все это справедливо, но зачем вдаваться в этот анализ? При структуре данных "массив массивов" разумно потратить чуть больше памяти на эл-ты первого уровня, зато намного выиграть в скорости удаления/вставки. Поэтому достаточно знать что QList не перемещает данные имеющиxся эл-тов.

Когда программист на С без затей пишет
Код:
int ** array = ...
Он ведь выделяет память для каждой строки, и имеет возможность их удалять, переставлять и.т.п. не трогая все остальные. Впрочем для пишущих статьи это почему-то неочевидно  Улыбающийся

Да, ссылку-то я и не накопипастил:) http://marcmutz.wordpress.com/effective-qt/containers/
QVector тоже не перемещает данные, если они movable (если мне не изменяет память)

PS: еле отправил пост:( Что-то форум на отправку тупит
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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