C++-如果在对角线上,则计数

C++ - Count if on diagonal line

本文关键字:如果 对角线 C++-      更新时间:2023-10-16

是否有任何算法或方法可以提供更有效的方法来执行以下操作?我正在考虑使用std::count_if

假设我有一个向量,它包含:

std::vector<std::vector<double> > A = 
{
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

我只想将所有对角元素存储在这个向量中,即{1, 5, 9}。我可以使用创建两个循环i, j并具有条件if(i == j)的传统方法来做到这一点,但有更好的方法吗?

假设我使用std::count_if:

std::count_if(std::begin(A), std::end(A), isDiagonalElement);

困惑:我如何判断对角线上的值是否有效?

带有isDiagonal函数的std:count_if将比您的实现慢,因为它将迭代所有元素,而手动实现只应逐个返回所需元素,其中(i==k)

我不认为有任何算法比这更快,因为基本上,你需要访问你想得到的数字至少一次才能得到它们。在任何类型的复制操作中,您都需要至少迭代一次所需的元素。

所以从理论上讲,你的手动算法

matrix[0][0], matrix[1][1], matrix[2][2] ...

不能再快了。

我认为这是一个拼写错误,你的意思是{1, 5, 9}。为什么不使用单个循环访问a[i][i]

相关文章: