| distance 
 Advanced Member
 | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору IriskaS
 
 Цитата:
 | подскажите, а как этот файлик откомпилировать?? | 
 хм.. я тут подумал, если возникают такого рода вопросы, лучше пока и не пытайся.
 лучше продолжай поиски. просто тут народ привык по-быстрому короткие задачки решать, а у тебя, если делать все правильно, то получится не на одну страницу кода. сорьки, но мне лень с этим возитьсяся.
 
 BFK
 позволю себе немного "прооптимизировать" исходник Qraizer'а с использованием boost'а, ибо там много чего полезного имеется.
 исходник опробирован на VS2005.
 
 
 Код:
 | // часть инклудов возможно лишняя, лень проверять...
 #include <numeric>
 #include <algorithm>
 #include <functional>
 #include <vector>
 #include <iostream>
 #include <iomanip>
 #include <boost/random.hpp>
 #include <boost/numeric/ublas/matrix.hpp>
 #include <boost/numeric/ublas/matrix_proxy.hpp>
 #include <boost/numeric/ublas/io.hpp>
 
 // немного подсократим название неймспейса...
 namespace ub = boost::numeric::ublas;
 
 // размерность матрицы
 static const size_t N = 2;
 
 // определение матрицы целых чисел
 typedef ub::matrix<int> MyMatrix;
 
 // заполнение матрицы случайными числами
 template <
 typename EngineT,  // используемый "движок" для генерации
 typename DistT  // диапазон распределения случайных чисел
 >
 void fill_matrix(MyMatrix& m, const EngineT& engine, const DistT& dist)
 {
 boost::variate_generator<EngineT, DistT> gen(engine, dist);
 for(MyMatrix::size_type i=0; i<m.size1(); i++)
 for(MyMatrix::size_type j=0; j<m.size2(); j++)
 m(i, j) = gen();
 }
 
 int main()
 {
 MyMatrix m(N, N);
 
 // 1. заполняем матрицу псевдо-случайной последовательностью в диапазоне -80..100
 // в этом примере в качестве генератора используем алгоритм by Makoto Matsumoto and Takuji Nishimura
 // известный под названием Mersenne twister
 fill_matrix(m, boost::mt19937(), boost::uniform_int<>(-80, 100));
 
 // 2. вывод заполненной матрицы на экран (точнее, в стандартный поток cout)
 // формат вывода такой: [Ny,Nx]((e00,e01),(e10,e11))
 // если не устраивает - вперед и с песней, переопределять operator <<
 std::cout << m << std::endl;
 
 // 3. суммы элементов строк матрицы
 std::vector<MyMatrix::size_type> sum;
 sum.reserve(N);
 for(MyMatrix::size_type i=0; i<m.size1(); i++)
 {
 ub::matrix_row<MyMatrix> row(m, i);
 sum.push_back(std::accumulate(row.begin(), row.end(), 0));
 }
 std::copy(sum.begin(), sum.end(), std::ostream_iterator<MyMatrix::size_type>(std::cout, " "));
 return (0);
 }
 | 
 |