Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Обучаемся проектированию двухмерных и трехмерных движков: шаблоны, матрицы и векторы

Ответить
Настройки темы
C/C++ - Обучаемся проектированию двухмерных и трехмерных движков: шаблоны, матрицы и векторы

Ветеран


Сообщения: 1396
Благодарности: 131


Конфигурация

Профиль | Отправить PM | Цитировать


Мне нужна матрица из векторов, например такого вида
(0,0,0) (1,1,1)
(1,1,1) (1,1,1)
Для этого нужно, чтобы я мог создавать матрицу произвольного типа : то есть, чтобы функция получила тип и динамически создала данные нужного типа

1. Как описать произвольный тип матрицы?
Код: Выделить весь код
template <class T>
typedef T** matrx;
(Насколько правильно такое описание?)

2. Как функции передать тип матрицы, которая мне нужна, чтобы она создала матрицу нужного типа?

Код: Выделить весь код
template <class T>
matrx create_matrix(int sz, T)
3.
Код: Выделить весь код
matrx create_matrix(int sz, T)
Как функция может определить что за параметр T ей "прислали"?
Нужно чтобы функция автоматически определила тип T и динамически создала данные нового типа
Код: Выделить весь код
matrix[k]=new T[columns];
Код: Выделить весь код
matrx create_matrix(int rows, int columns);
matrx create_matrix(int rows, int columns)
{
	matrx matrix;
	matrix = new vectr[rows];
	for(int k=0;k<rows;k++)
		{
		matrix[k]=new T[columns];
		}
	return (matrix);

}

Сейчас в таком виде
Код: Выделить весь код
typedef doubl** matrx;
matrx create_matrix(int rows, int columns);
matrx create_matrix(int rows, int columns)
{
	matrx matrix;
	matrix = new vectr[rows];
	for(int k=0;k<rows;k++)
		{
		matrix[k]=new doubl[columns];
		}
	return (matrix);

}
то есть функция создает матрицу только типа заданного как doubl
Код: Выделить весь код
typedef int doubl;
Код: Выделить весь код
typedef double doubl;

Отправлено: 10:05, 05-07-2008

 

Ветеран


Сообщения: 1396
Благодарности: 131

Профиль | Отправить PM | Цитировать


Видимо, чтобы это сделать, надо реализовывать полностью абстрактные классы и конструкторы в зависимости от типа данных.. Буду читать литературу - с наскока, не понимая до конца синтаксис классов в с++, абстрактный класс матрицы не просто реализовать..

Я хотел объединить эти две функции в одну, используя только методы структурного программирования
Код: Выделить весь код
typedef int doubl;
typedef doubl* vectr;
typedef COLORREF* vectr_clrs;
typedef doubl** matrx;
typedef COLORREF** matrx_clrs;
matrx create_matrix(int rows, int columns)
{
	matrx matrix;
	matrix = new vectr[rows];
	for(int k=0;k<rows;k++)
		{
		matrix[k]=new doubl[columns];
		}
	return (matrix);

}

matrx_clrs create_color_matrix(int rows, int columns)
{
	matrx_clrs matrix;
	matrix = new vectr_clrs[rows];
	for(int k=0;k<rows;k++)
		{
		matrix[k]=new COLORREF[columns];
		}
	return (matrix);
}

-------
Ehhh.. what's up, doc?..


Отправлено: 11:57, 05-07-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1396
Благодарности: 131

Профиль | Отправить PM | Цитировать


Задан такой класс.

Код: Выделить весь код
template <class T>
class vector
{
	public:
		typedef T* iterator;
		vector(int sz);
		~vector() { delete []v;}
		iterator begin() { return v;}
		iterator end() {return v+sz;}
		show_sz();
		int get_sz();
		show_vector();
	private:
		T* v;
		int sz;
};
Для чего мы ставим ключевое слово typedef в строке "typedef T* iterator;"? Почему нельзя написать "T* iterator;"?

-------
Ehhh.. what's up, doc?..


Отправлено: 20:27, 07-07-2008 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


для работы с линейной алгеброй в с++ есть шаблоны valarray<typename T>, правда, как говорят разработчики стандарта, за него не было ответсвенного, поэтому он сделан полу-тяп-ляп. В принципе работает, нареканий не было
Код: Выделить весь код
#include <valarray>
std::valarray<std::valarray<double> > matrix(2, std::valarray<double>(3, 0.)); //- матрица 3x2, инициализированая нулями
мтаричные операции так же можно делать через slice

Отправлено: 15:55, 10-07-2008 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Обучаемся проектированию двухмерных и трехмерных движков: шаблоны, матрицы и векторы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - [решено] Нахождение обратной матрицы методом Гаусса и рассширенной матрицы D.Y. Программирование и базы данных 64 06-05-2011 22:59
C/C++ - Изменение двухмерных массивов mrcnn Программирование и базы данных 9 03-07-2008 17:16
C/C++ | Матрицы Kuron Программирование и базы данных 2 21-01-2007 10:09
доки по проектированию баз данных. Vlad Drakula Вебмастеру 1 12-06-2005 20:26
Формирование матрицы Sergey Po Программирование и базы данных 3 28-04-2004 04:47




 
Переход