Russian Qt Forum
Ноябрь 05, 2024, 22:04
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Работа с двумерным массивом QVector
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Работа с двумерным массивом QVector (Прочитано 10293 раз)
Roninsc2
Гость
Работа с двумерным массивом QVector
«
:
Декабрь 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
Сообщений: 606
Re: Работа с двумерным массивом QVector
«
Ответ #1 :
Январь 01, 2015, 12:35 »
http://www.prog.org.ru/topic_27860_0.html
Записан
Roninsc2
Гость
Re: Работа с двумерным массивом QVector
«
Ответ #2 :
Январь 01, 2015, 18:57 »
Благодарю!
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Работа с двумерным массивом QVector
«
Ответ #3 :
Январь 01, 2015, 20:28 »
Цитата: Roninsc2 от Январь 01, 2015, 18:57
Благодарю!
Я бы не стал так всерьёз относиться к тем "статьям"
8Observer8
а.. Особенно по части двумерных массивов.. (это, скорее, пример того, как делать не стоит..)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Hrundel
Гость
Re: Работа с двумерным массивом QVector
«
Ответ #4 :
Январь 01, 2015, 21:27 »
Цитата: m_ax от Январь 01, 2015, 20:28
Цитата: Roninsc2 от Январь 01, 2015, 18:57
Благодарю!
Я бы не стал так всерьёз относиться к тем "статьям"
8Observer8
а.. Особенно по части двумерных массивов.. (это, скорее, пример того, как делать не стоит..)
Поддерживаю.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Работа с двумерным массивом QVector
«
Ответ #5 :
Январь 02, 2015, 10:59 »
Цитата: Roninsc2 от Декабрь 31, 2014, 22:12
QVector< QVector<int> > array;
...
array.at(??) = 0;
...
data[?][?] = 0;
Лучше
Код
C++ (Qt)
QList
<
QVector
<
int
>
>
array
;
А обращение к эл-ту - просто
Код
C++ (Qt)
array
[
i
]
[
j
]
т.е. как к обычному массиву.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Работа с двумерным массивом QVector
«
Ответ #6 :
Январь 02, 2015, 22:50 »
QList не лучше, сейчас тренд отказываться от него
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Работа с двумерным массивом QVector
«
Ответ #7 :
Январь 03, 2015, 08:43 »
Цитата: Авварон от Январь 02, 2015, 22:50
QList не лучше, сейчас тренд отказываться от него
Мотивация впечатляет: "потому что так говорят"
Укажите первоисточник please. И кстати - а чем плох "вектор векторов"?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Работа с двумерным массивом QVector
«
Ответ #8 :
Январь 03, 2015, 11:41 »
Вот огромная статья, сравнивающая стл и Qt контейнеры. Минусы QList там описаны.
Вектор векторов ничем не плох, так как структура в памяти ничем не будет отличаться от той же в QList (размер вектора == sizeof(void *), он movable в терминологии Qt, следовательно, лист разместит сами вектора в ячейках массива)
А вот в Qt6 размер вектора может и поменяться - чтобы поддерживать векторные литералы (и не иметь оверхеда в виде фейкового ArrayData) надо data и size вынести из d_ptr. И тут QList будет уже давать оверхед по памяти.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Работа с двумерным массивом QVector
«
Ответ #9 :
Январь 03, 2015, 15:49 »
Цитата: Авварон от Январь 03, 2015, 11:41
Вот огромная статья, сравнивающая стл и Qt контейнеры. Минусы QList там описаны.
Где "вот"
Цитата: Авварон от Январь 03, 2015, 11:41
Вектор векторов ничем не плох, так как структура в памяти ничем не будет отличаться от той же в QList (размер вектора == sizeof(void *), он movable в терминологии Qt, следовательно, лист разместит сами вектора в ячейках массива)
А вот в Qt6 размер вектора может и поменяться - чтобы поддерживать векторные литералы (и не иметь оверхеда в виде фейкового ArrayData) надо data и size вынести из d_ptr. И тут QList будет уже давать оверхед по памяти.
Все это справедливо, но зачем вдаваться в этот анализ? При структуре данных "массив массивов" разумно потратить чуть больше памяти на эл-ты первого уровня, зато намного выиграть в скорости удаления/вставки. Поэтому достаточно знать что QList не перемещает данные имеющиxся эл-тов.
Когда программист на С без затей пишет
Код:
int ** array = ...
Он ведь выделяет память для каждой строки, и имеет возможность их удалять, переставлять и.т.п. не трогая все остальные. Впрочем для пишущих статьи это почему-то неочевидно
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Работа с двумерным массивом QVector
«
Ответ #10 :
Январь 03, 2015, 17:31 »
Цитата: Igors от Январь 03, 2015, 15:49
Цитата: Авварон от Январь 03, 2015, 11:41
Вот огромная статья, сравнивающая стл и Qt контейнеры. Минусы QList там описаны.
Где "вот"
Цитата: Авварон от Январь 03, 2015, 11:41
Вектор векторов ничем не плох, так как структура в памяти ничем не будет отличаться от той же в 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
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...