Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';将矩阵_exp从dlib分配到std::vector?_C++_Dlib - Fatal编程技术网

C++ 为什么可以';将矩阵_exp从dlib分配到std::vector?

C++ 为什么可以';将矩阵_exp从dlib分配到std::vector?,c++,dlib,C++,Dlib,我正在使用Dlib,这要归功于它伟大的矩阵子模块。我发现做快速科学算法是非常完整和有用的。我设法添加了一些自定义操作,并了解了它的工作原理 然而,有一个问题困扰了我很久。有没有具体的原因可以解释为什么无法将任何类型的矩阵表达式赋给std::vector 编辑: 以下是一个典型的dlib函数: template <typename EXP> const matrix_op<op_trans<EXP> > trans(const matrix_exp<EXP

我正在使用Dlib,这要归功于它伟大的矩阵子模块。我发现做快速科学算法是非常完整和有用的。我设法添加了一些自定义操作,并了解了它的工作原理

然而,有一个问题困扰了我很久。有没有具体的原因可以解释为什么无法将任何类型的矩阵表达式赋给
std::vector

编辑:

以下是一个典型的dlib函数:

template <typename EXP>
const matrix_op<op_trans<EXP> > trans(const matrix_exp<EXP>& m) {
  typedef op_trans<EXP> op;
  return matrix_op<op>(op(m.ref());
}
但当它工作时,任何表达式都被视为
matrix\u exp
matrix
matrix\u op
matrix\u add\u exp
。。。但对于
std::vector
,情况并非如此:

“const std::vector”不是从“const std::vector”派生而来的。

我只是想知道这是否是dlib有意为之,是否有任何原因,因为它可能在需要同时处理多个矩阵的多个算法中有用。。。如果解决这个问题的一些方法可以奏效的话(免责声明:我第一次看到dlib,我只是在暗中摸索,不知道dlib/它的矩阵类实际上是如何工作的。)

A
dlib::matrix
,它将

…如果布局为行主布局,则按行主顺序迭代矩阵元素;如果布局为列主布局,则按列主顺序迭代矩阵元素

因此,分配给std::vector可以非常简单:

 dlib::matrix< ... > mat;
 // fill the matrix, do operations on it etc.    
 std::vector< mat::type > vec( mat.begin(), mat.end() );
dlib::matrix<…>垫;
//填写矩阵,对其进行操作等。
std::vectorvec(mat.begin(),mat.end());

我不知道这是否是你想要的,因为你并没有真正告诉我们

“似乎无法将任何类型的矩阵表达式指定给std::vector”:请提供详细信息。请参阅“如何创建一个最小的、完整的、可验证的示例”:您必须询问库维护人员为什么要实现此功能?是的,更重要的是为什么他们没有在库中实现此功能。我自己没有看到任何大问题,但我对模板表达技术还不熟悉,所以如果有很大的原因,我只是想知道,我在互联网上没有发现类似的问题…@baptiste——DevSolar给出的答案表明作者是明智的。如果要将矩阵存储在其他序列容器中,例如
std::deque
std::list
等,该怎么办。?使用迭代器范例,可以将dlib::matrix存储在这些其他容器中,而不仅仅是
std::vector
。我刚才看到您询问的是
matrix\u exp
,而不是
matrix
。最优秀的C++数据容器,也有“<代码>开始”()和<代码>()<代码>,它将“以行的主要顺序迭代矩阵的元素”。
 dlib::matrix< ... > mat;
 // fill the matrix, do operations on it etc.    
 std::vector< mat::type > vec( mat.begin(), mat.end() );