Название: Работа с двумерным массивом QVector Отправлено: 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; } } Вот как-то так Буду благодарен за помощь. Название: Re: Работа с двумерным массивом QVector Отправлено: alex312 от Январь 01, 2015, 12:35 http://www.prog.org.ru/topic_27860_0.html
Название: Re: Работа с двумерным массивом QVector Отправлено: Roninsc2 от Январь 01, 2015, 18:57 Благодарю!
Название: Re: Работа с двумерным массивом QVector Отправлено: m_ax от Январь 01, 2015, 20:28 Благодарю! Я бы не стал так всерьёз относиться к тем "статьям" 8Observer8а.. Особенно по части двумерных массивов.. (это, скорее, пример того, как делать не стоит..) Название: Re: Работа с двумерным массивом QVector Отправлено: Hrundel от Январь 01, 2015, 21:27 Благодарю! Я бы не стал так всерьёз относиться к тем "статьям" 8Observer8а.. Особенно по части двумерных массивов.. (это, скорее, пример того, как делать не стоит..) Поддерживаю. Название: Re: Работа с двумерным массивом QVector Отправлено: Igors от Январь 02, 2015, 10:59 QVector< QVector<int> > array; Лучше ... array.at(??) = 0; ... data[?][?] = 0; Код А обращение к эл-ту - просто Код т.е. как к обычному массиву. Название: Re: Работа с двумерным массивом QVector Отправлено: Авварон от Январь 02, 2015, 22:50 QList не лучше, сейчас тренд отказываться от него
Название: Re: Работа с двумерным массивом QVector Отправлено: Igors от Январь 03, 2015, 08:43 QList не лучше, сейчас тренд отказываться от него Мотивация впечатляет: "потому что так говорят" :) Укажите первоисточник please. И кстати - а чем плох "вектор векторов"?Название: Re: Работа с двумерным массивом QVector Отправлено: Авварон от Январь 03, 2015, 11:41 Вот огромная статья, сравнивающая стл и Qt контейнеры. Минусы QList там описаны.
Вектор векторов ничем не плох, так как структура в памяти ничем не будет отличаться от той же в QList (размер вектора == sizeof(void *), он movable в терминологии Qt, следовательно, лист разместит сами вектора в ячейках массива) А вот в Qt6 размер вектора может и поменяться - чтобы поддерживать векторные литералы (и не иметь оверхеда в виде фейкового ArrayData) надо data и size вынести из d_ptr. И тут QList будет уже давать оверхед по памяти. Название: Re: Работа с двумерным массивом QVector Отправлено: Igors от Январь 03, 2015, 15:49 Вот огромная статья, сравнивающая стл и Qt контейнеры. Минусы QList там описаны. Где "вот" ???Вектор векторов ничем не плох, так как структура в памяти ничем не будет отличаться от той же в QList (размер вектора == sizeof(void *), он movable в терминологии Qt, следовательно, лист разместит сами вектора в ячейках массива) Все это справедливо, но зачем вдаваться в этот анализ? При структуре данных "массив массивов" разумно потратить чуть больше памяти на эл-ты первого уровня, зато намного выиграть в скорости удаления/вставки. Поэтому достаточно знать что QList не перемещает данные имеющиxся эл-тов. А вот в Qt6 размер вектора может и поменяться - чтобы поддерживать векторные литералы (и не иметь оверхеда в виде фейкового ArrayData) надо data и size вынести из d_ptr. И тут QList будет уже давать оверхед по памяти. Когда программист на С без затей пишет Код: int ** array = ... Название: Re: Работа с двумерным массивом QVector Отправлено: Авварон от Январь 03, 2015, 17:31 Вот огромная статья, сравнивающая стл и Qt контейнеры. Минусы QList там описаны. Где "вот" ???Вектор векторов ничем не плох, так как структура в памяти ничем не будет отличаться от той же в QList (размер вектора == sizeof(void *), он movable в терминологии Qt, следовательно, лист разместит сами вектора в ячейках массива) Все это справедливо, но зачем вдаваться в этот анализ? При структуре данных "массив массивов" разумно потратить чуть больше памяти на эл-ты первого уровня, зато намного выиграть в скорости удаления/вставки. Поэтому достаточно знать что QList не перемещает данные имеющиxся эл-тов. А вот в Qt6 размер вектора может и поменяться - чтобы поддерживать векторные литералы (и не иметь оверхеда в виде фейкового ArrayData) надо data и size вынести из d_ptr. И тут QList будет уже давать оверхед по памяти. Когда программист на С без затей пишет Код: int ** array = ... Да, ссылку-то я и не накопипастил:) http://marcmutz.wordpress.com/effective-qt/containers/ QVector тоже не перемещает данные, если они movable (если мне не изменяет память) PS: еле отправил пост:( Что-то форум на отправку тупит |