小编Don*_*uth的帖子

关于检查C++中的集合是否是代数组的几个问题

我开始创建一个用抽象代数做事的库.现在我正在尝试创建一个检查集合是否为组的函数.它应该是不言自明的:

在数学中,一个群体是一组元素,同时结合了任何两个元素的运算,形成满足四个条件的第三个元素,称为群组公理,即闭包,关联性,同一性和可逆性.组中最熟悉的一个例子是整数集和加法运算; 任何两个整数的加法形成另一个整数.(http://en.wikipedia.org/wiki/Group_(mathematics))

#include <set>
#include <iostream>

template <typename ObType, typename BinaryFunction>
bool isGroup(const std::set<ObType> & S, BinaryFunction & op)
{
    /*
       isGroup returns true or false depending on whether the set S
       along with the operator op is a group in the Algebraic sense.
       That is, S is a group if and only if all the 4 following
       conditions are true: 
            (1) If a, b in S, then a op b in S
            (2) If a, …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm math linear-algebra equation-solving

8
推荐指数
1
解决办法
352
查看次数

检查条件是否为真更快?

(1)

if (!cond)
Run Code Online (Sandbox Code Playgroud)

要么

(2)

if (cond == false)
Run Code Online (Sandbox Code Playgroud)

好像我看到很多人使用(1).但这不是最优的吗?在C++中,if (...)只要括号中的任何内容都是非零值,语句就会计算为true.因此,在(1)中,必须发生的是

  • 做一个合乎逻辑的NOT cond
  • 检查结果是否为非零(是否有任何位)

而在(2)中,所有必须发生的是

  • 检查是否cond为零(是否所有位都关闭)

现在,检查所有位是否都关闭所花费的时间总是大于或等于检查是否有任何位的时间.因此,问题在于执行逻辑NOT的时间是否平均可以弥补任何差异.

我应该使用哪个来优化我的代码?

c++ optimization

-2
推荐指数
1
解决办法
190
查看次数