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&))