C++-如果在对角线上,则计数
C++ - Count if on diagonal line
是否有任何算法或方法可以提供更有效的方法来执行以下操作?我正在考虑使用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);
困惑:我如何判断对角线上的值是否有效?
我不认为有任何算法比这更快,因为基本上,你需要访问你想得到的数字至少一次才能得到它们。在任何类型的复制操作中,您都需要至少迭代一次所需的元素。
所以从理论上讲,你的手动算法
matrix[0][0], matrix[1][1], matrix[2][2] ...
不能再快了。
我认为这是一个拼写错误,你的意思是{1, 5, 9}
。为什么不使用单个循环访问a[i][i]
?
相关文章:
- 如果没有malloc,链表实现将失败
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- C++擦除(如果存在)
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 在'如果'陈述输出如何正确
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 如何在cuSparse中得到稀疏矩阵的对角线
- 如果基类包含双指针成员,则派生类的构造函数
- 如果没有数学库,我如何在C++中创建复利公式
- 如果我已经有一个头,那么模板(-t)文件属于哪里
- 当 M 是奇数时,如果它是对角线的中间,则在对角线交换后显示零
- C++-如果在对角线上,则计数