Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++ 指向特征类型向量的Pass std::迭代器_C++_Eigen - Fatal编程技术网

C++ 指向特征类型向量的Pass std::迭代器

C++ 指向特征类型向量的Pass std::迭代器,c++,eigen,C++,Eigen,我有一个很大的std::vector放在内存的某个地方。我可以将此向量的迭代器传递给函数,如下所示: typedef std::vector<Eigen::Array<float, Eigen::Dyanamic, 1>>::iterator ArrayIterator; void MyFunction(ArrayIterator v1_beg, ArrayIterator v1_end, ArrayIterator v2_beg, Ar

我有一个很大的
std::vector
放在内存的某个地方。我可以将此向量的迭代器传递给函数,如下所示:

typedef std::vector<Eigen::Array<float, Eigen::Dyanamic, 1>>::iterator ArrayIterator;

void MyFunction(ArrayIterator v1_beg, ArrayIterator v1_end,
                ArrayIterator v2_beg, ArrayIterator v2_end) {

   Eigen::Array<float, Eigen::Dynamic, 1> tmp(*v1_beg.size());
   tmp.setZero(); 
   while (v1_beg != v1_end) { tmp += *v1_beg++ * *v2_beg++; }

}
typedef std::vector::迭代器数组迭代器;
无效MyFunction(阵列计数器v1_beg,阵列计数器v1_end,
阵列致畸器v2\u beg,阵列致畸器v2\u end){
特征::数组tmp(*v1_beg.size());
tmp.setZero();
而(v1_beg!=v1_end){tmp+=*v1_beg++**v2_beg++}
}
我知道,如果想要避免临时性,将
Eigen
类型传递给函数可能是一件棘手的事情。上述解决方案似乎避免了临时性(例如打印
&(*v_beg)。data()
给出了外部向量中位置的正确内存地址)。然而,由于传递纯
Eigen
类型所涉及的微妙之处,它似乎“太容易了”。我的问题是:我能确信像上面这样的方法不会导致临时机构的产生吗?或者在我取消引用(
*v1\u beg
)时是否会调用临时变量


谢谢你的评论

在您的示例中,
*v1_beg
将返回对
特征码::数组的引用(与
特征码::数组
相同,顺便说一句),在该位置之前不会调用特征码。然后,实际特征码调用(半伪码):

在没有临时人员的情况下确实有效

ArrayXf::operator+=(operator*(const ArrayXf&, const ArrayXf&))