Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2010, 12:29   #1
Mushu
 
Регистрация: 26.06.2009
Сообщений: 7
По умолчанию Stl Умножение матриц

Помогите, пожалуйста, понять, в чем дело.
Есть 2 матрицы. Исходная умножается на транспонированную слева.
Хранятся матрицы по строкам. Матрицы ражреженные.

Вот код:
Код:
template<typename T>
	NonSymMatrix<T> operator * (NonSymMatrix<T>& A)
	{
		NonSymMatrix<T> R;
		for(int i = 0; i < _M.size(); i++)
		{
			for(auto bitRow = A._M[i].begin();;)
			{
				for(auto aitRow = _M[i].begin();;)
				{
					if(bitRow -> first > aitRow -> first)
					{
						aitRow++; 
						if(aitRow == _M[i].end()) break;
					}
					else if(aitRow -> first > bitRow -> first)
					{
						bitRow++;
						if(bitRow == A._M[i].end()) break;
					}
					else if(aitRow -> first == bitRow -> first)
					{
						R(bitRow -> first, aitRow -> first) += bitRow -> second * aitRow -> second;
						aitRow ++;
						bitRow ++;
						if(aitRow == _M[i].end() || bitRow == A._M[i].end()) break;
					}
				}
			}
		}
		return R;
	}

Ошибка выполнения.
1> unknown location(0): fatal error in "multiplication": c:\program files\microsoft visual studio 10.0\vc\include\xtree(236) : Assertion failed: map/set iterator not dereferencable


Не могу понять, что не так. Если кто знает - подскажите, пожалуйста.From Stilet: Оформил.
Если вы лжете компилятору, он будет мстить!
Генри Спенсер.

Последний раз редактировалось Stilet; 18.06.2010 в 13:11.
Mushu вне форума Ответить с цитированием
Старый 18.06.2010, 12:58   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

оформите в тег code пожалуйста
+
таки еще не вышедший новый стандарт уже в ходу ? )

Мне кажется проблема тут :
R(bitRow -> first, aitRow -> first) += bitRow -> second * aitRow -> second;

только фиг его знает, что вы там наперегружали =)

PS :
класс->поле/метод
тут пробелы никогда не ставятся =) Как и при инкрименте.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 18.06.2010 в 13:11.
ozo вне форума Ответить с цитированием
Старый 18.06.2010, 13:11   #3
Mushu
 
Регистрация: 26.06.2009
Сообщений: 7
По умолчанию

Не срабатывает проверка.

Код:
if(aitRow == _M[i].end() || bitRow == A._M[i].end()) break;
С перегрузкой все в порядке...
Если вы лжете компилятору, он будет мстить!
Генри Спенсер.
Mushu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Умножение матриц. Manik Помощь студентам 39 26.12.2009 14:20
Умножение матриц Alyonka_v Помощь студентам 2 18.08.2009 21:51