Eigen::RowVector 迭代器

Posted

技术标签:

【中文标题】Eigen::RowVector 迭代器【英文标题】:Eigen::RowVector Iterator 【发布时间】:2013-05-29 22:28:48 【问题描述】:

有人能告诉我到底如何迭代 Eigen::RowVectorXf 吗?

我通过网络和文档查找了 3 个小时,我只能找到from this link,我可以通过以下方式访问它:

vector(i)
vector[i]

我有一个:

auto vec = std::make_shared<Eigen::RowVectorXf>( rowIndex.size() ); 

我想用词频填充。

Eigen::RowVectorXf::InnerIterator it(vec); it; ++it

没有用,而且

Eigen::RowVectorXf::Iterator it(vec); it; ++it

不存在。

似乎唯一可行的是:

for ( int i = 0; i < vec->row( 0 ).size(); i++ )

    std::cout << vec->row( 0 )[i] << std::endl;

恕我直言,这似乎很奇怪,因为我不应该明确指向 row(0),因为这是一个 RowVector。

难道没有更干净、更快或更优雅的方式吗?

【问题讨论】:

可能有帮助的一点是,在本征中没有“向量”之类的东西。特征向量是矩阵的类型定义;我引用:“Vector4f 是 4 个浮点数的向量 (Matrix) RowVector3i 是 3 个整数的行向量 (Matrix)”我仍然想遍历矩阵。我也找了几个小时;找不到任何东西。我尝试阅读源代码,这非常糟糕。 【参考方案1】:

不需要 row(0),您可以使用 ->coeff(i)(不推荐,因为它会跳过断言,即使在调试模式下也是如此),或者使用 operator* 取消引用您的 shared_pointer

for(int i=0; i<vec->size(); ++i)
  cout << (*vec)[i];

您也可以使用 InnerIterator,但您必须取消引用您的 shared_pointer

RowVectorXf::InnerIterator it(*vec); it; ++it

【讨论】:

以上是关于Eigen::RowVector 迭代器的主要内容,如果未能解决你的问题,请参考以下文章

迭代器的解释

五 迭代器生成器

STL迭代器相关的输出迭代器

课时10:迭代器迭代器失效分析

C++迭代器 iterator

C++迭代器 iterator