gpt4 book ai didi

c++ - 传递指向 Eigen 类型 vector 的 std::iterator

转载 作者:搜寻专家 更新时间:2023-10-31 02:14:13 25 4
gpt4 key购买 nike

我有一个很大的std::vector<Eigen::Array<float, Eigen::Dynamic, 1>>坐在内存中的某个地方。我可以将此 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++; }

}

我知道传递 Eigen如果想要避免临时对象,函数类型可能是一件棘手的事情。上面的解决方案似乎避免了临时(例如打印 &(*v_beg).data() 给出了外部 vector 中位置的正确内存地址)。然而,由于传递纯 Eigen 所涉及的微妙之处。类型,这似乎“太容易了”。我的问题是:我可以确信像上面这样的方法不会导致创建临时对象吗?或者当我取消引用时可能会调用临时文件 ( *v1_beg )?

感谢任何评论!

最佳答案

在你的例子中 *v1_beg将返回对 Eigen::Array<float, Eigen::Dynamic, 1> 的引用(这与 Eigen::ArrayXf 相同,顺便说一句),到那个地方没有调用 Eigen 代码。实际的 Eigen 代码然后调用(半伪代码):

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

确实可以在没有临时文件的情况下工作。

关于c++ - 传递指向 Eigen 类型 vector 的 std::iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40218354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com