我有一个方法,将std::vector作为其参数之一。有没有一种方法可以通过将std::vector分配给矩阵来初始化矩阵?这是我在下面尝试做的。有谁知道我如何实现将 vector (甚至 double 指针)分配给矩阵?提前致谢。麦克风
void Foo(std::vector v)
{
matrix<double> m(m, n, v);
// work with matrix...
}
最佳答案
根据boost matrix documentation,矩阵类有3个构造函数:空,复制和一个构造函数,它们采用两种size_types作为行数和列数。由于boost没有定义它(可能是因为有很多方法可以做到,而且并不是每个类都可以定义到其他每个类的转换),因此您需要定义转换。
这是我将要使用的一种方法,但是由于有多种方法可以执行此操作,而该问题并未说明您希望如何完成此操作,因此您可能会发现另一种更适合您的情况的方法。
void Foo(const std::vector<double> & v) {
size_t m = ... // you need to specify
size_t n = ... // you need to specify
if(v.size() < m * n) { // the vector size has to be bigger or equal than m * n
// handle this situation
}
matrix<double> mat(m, n);
for(size_t i=0; i<mat.size1(); i++) {
for(size_t j=0; j<mat.size2(); j++) {
mat(i,j) = v[i+j*mat.size1()];
}
}
}
关于您提供的代码的几点注释:std::vector需要模板化参数,并且您将
m
声明为矩阵,并为其构造函数输入参数。关于c++ - 用std::vector或数组初始化boost矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8109443/