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); } |
|