我有一个方法,将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/

10-12 12:39
查看更多