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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Матрица из QVector  (Прочитано 10575 раз)
danius
Гость
« : Март 08, 2006, 22:15 »

Извиняйте если уже где-то звучало. При пользовании STL был примерно такой фрагмент:
в определении класса:
Код:
vector<vector<int> > ground;

в конструкторе:
Код:
ground.assign(nrow, ncol);


Как бы можно было получить матрицу из вектора с помощью QTL. Вопрос в том, что метода QVector::assign в QTL нет, можно попробовать resize, но выходит довольно громоздко (у меня Грустный ). Может кто уже сталкивался с подобным. Спасибо.
Записан
Steven_Orko
Гость
« Ответ #1 : Март 08, 2006, 23:19 »

А почему не хочешь использовать MTL(The Matrix Template Library)Непонимающий
http://www.osl.iu.edu/research/mtl/

Там есть много функций для работы с матрицами )))
Записан
danius
Гость
« Ответ #2 : Март 09, 2006, 10:16 »

Цитата: "Steven_Orko"

Там есть много функций для работы с матрицами )))


Да, очень много  :shock: у меня в программе всего две матрицы размером не более 30x40 не очень хотелось бы таскать ради этого с собой такую библиотеку. Хотя вещь стоящая, не знал о ней.

добавлено спустя 2 часа 29 минут:

 Вот нашел еще одну библиотеку libkdegames (из пакета kdegames), есть там файл kgrid2d.h в котором определен шаблонный класс Generic для 'двухмерной сетки', но и там они матрицу раскладывают в вектор по строкам (правда довольно прозрачно это делают). Так что вопрос остается открытым.
Записан
Dendy
Гость
« Ответ #3 : Март 09, 2006, 10:18 »

Qt используют единьІй стиль работьІ с векторами, чтобьІ не возникало путаницьІ, поетому вектор всегда одномерньІй. Но могу предложить такой способ для работьІ с массивами:

Код:
QVector< QVector<int> > matrix = QVector< QVector<int> >( 30, QVector<int>( 40 ) );


или

Код:
matrix = QVector< QVector<int> >( 30, QVector<int>( 40, 7 ) ); // 7 - default value, matrix filled with


или

Код:
matrix.resize( 30 );
matrix.fill( QVector<int>( 40 ) );


Громоздкий конструктор, но работа с такой матрицей как с обьІчной:

Код:
matrix[3][5] = 123;
...
int value = matrix[6][2];


Кстати, одно из нововведений в новом стандарте С++, которьІй предложил Страуструп - обращение к шаблонньІм классам без повторного указания типа.
Записан
danius
Гость
« Ответ #4 : Март 09, 2006, 12:40 »

У меня было:
Код:
template <class T>
void initMatrix(QVector<QVector<T> > &matrix, int nrow, int ncol, T value)
{
    matrix.resize(nrow);
for(int i = 0; i != nrow; ++i)
matrix[i].resize(ncol);

for(int i = 0; i != nrow; ++i)
for(int j = 0; j != ncol; ++j) matrix[i][j] = value;
}

Но у Dendy гораздо элегантнее  Веселый . Спасибо за помощь
Записан
SLiDER
Гость
« Ответ #5 : Март 09, 2006, 13:06 »

Цитата: "Steven_Orko"
А почему не хочешь использовать MTL(The Matrix Template Library)Непонимающий
http://www.osl.iu.edu/research/mtl/

Там есть много функций для работы с матрицами )))


Немного оффтопика.  Улыбающийся  Может кто не знает !!!  :shock:  Осмелюсь предложить, всем кто пишет числодробилки, посмотреть в сторону библиотеки Blitz++, не пожалеете. Очень хороший пример того как надо писать на С++.  :wink:
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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