随机(只读)访问 Eigen::SparseVector 的元素

random (read only) access to elements of Eigen::SparseVector

考虑以下愚蠢的代码片段

typedef Eigen::SparseVector<std::complex<double>, Eigen::ColMajor,long long> Vector;

Vector V = CreateData();

for(i=0;i<V.size(),++i)
{
  DoSomething( Vector.coeffRef(i));
}

我有兴趣(出于某种目的)访问(比方说)稀疏向量 V 的每个元素,并且当然期望在访问未初始化的条目时返回零。

我惊讶地发现,在访问非 existing\initialized 条目时,此条目 在读取 时创建,正确值为零当然可以,但是为什么呢???

我绝对对这种行为不感兴趣。我想要得到的只是在访问非初始化条目以进行读取时返回零,否则转换为完整矩阵会更快。 .coeffRef 是否有不会分配新条目的替代方法。

使用 coeff() 方法代替 coeffRef() 方法。它正是你想要的。另一方面,coeffRef() returns 是读写访问的引用,因此该元素必须存在。