sizeof()
не знает выделения памяти во время выполнения.Чтобы полностью понять вопрос, вам нужно знать реализацию ublas::matix
и ublas::compressed_matrix
, у них обоих есть базовый массив хранения (по умолчанию ublas::::unbounded_array
, и вы можете выбрать другие, указав параметр шаблона).В отличие от ublas::matix
, ublas::compressed_matrix
хранит только ненулевые элементы матрицы.
Меня также смутило, как мне указать расположение ненулевых элементов в ublas ::ressed_matrix.
использовать итератор.
Что произойдет, если я попытаюсь сохранить больше, чем количество ненулевых элементов, установленных в конструкторе?
Я не понимаю, как вы храните больше, чем количество ненулевых элементов, установленных вконструктор, если вы имеете в виду третий параметр, это просто предварительно выделенный размер базового массива хранения.
Например:
#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/storage.hpp>
namespace ublas = boost::numeric::ublas;
int main()
{
ublas::compressed_matrix<double> m(4, 4, 2*2);
m(1,2) = 3.5;
std::cout << m.value_data().size() << '\n';
typedef ublas::compressed_matrix<double>::iterator1 it1_t;
typedef ublas::compressed_matrix<double>::iterator2 it2_t;
for (it1_t it1 = m.begin1(); it1 != m.end1(); it1++)
{
for (it2_t it2 = it1.begin(); it2 != it1.end(); it2++)
{
std::cout << "(" << it2.index1() << "," << it2.index2() << ") = ";
std::cout << *it2 << std::endl;
}
}
{
ublas::matrix<double> m(4,4);
std::cout << m.data().size() << '\n';
}
{
ublas::compressed_matrix<double> m(4, 4, 5*5);
std::cout << m.value_data().size() << '\n';
}
}