涉及Bool设置的c++优化
C++ Optimization Involving Bool Settings
好的,所以我正在寻找"最好的方法"来解决这个问题。
我有一堆设置的布尔值,我想更简洁地存储和访问它们。
-- Current
bool MySetting1;
bool MySetting2;
bool MySetting3;
bool MySetting4;
.....
Accessed with
.....
if (MySetting1)
在这个例子中,我知道我的设置被称为什么,以及所有有趣的爵士乐。我已经考虑过的选项,环顾四周的地图和无序的地图和布尔向量…我只是在寻找最优化的做事方式。因为目前的方式…很好……在我看来,它只是不太干净。
enum myEnum
{
SETTING_NAME1 = 0,
SETTING_NAME2 = 0,
...
}
map<int,bool> myMap;
是否访问时间做myMap[SETTING_NAME1]相同的当前方法?它是直接访问还是需要查找?
我只是想更新一下,让大家知道我采取的策略。
我使用enum作为标识
enum myEnum
{
SETTING_NAME1 = 0,
SETTING_NAME2 = 1,
...
}
和vector来保存和调用数据
vector<bool> myVec;
if (myVec[SETTING_NAME1])
这应该给我直接访问,保持大小相对较小(因为它是一个基于位的向量),以及我想要的分隔。
直接访问bool值显然比通过map或其他方式访问bool值要快。然而, 不太可能是性能关键的,差异可以忽略不计。
我建议完全不要担心性能对于这样的事情,如果它干扰了编写尽可能清晰的代码。担心这是浪费时间和过早的优化没有任何好处。最好的方法是编写清晰易懂的代码,然后信任编译器的优化器,并花时间在性能关键区域优化代码(当然是由分析决定的,而不仅仅是直觉/猜测),这将产生实际的差异。
你能做的,是一个bitmap
。
long long int bitmask;
或取决于你有多少个布尔值
那么你可以写
bool checkMask(long long int bitmask, int check) { return bitmask & (1 << check) }
其中check类似于布尔值的索引,可以在enum class
或we中设置。
它的性能肯定不会比直接使用布尔值更好,但它提供了一些管理大量布尔值的好方法。
你应该在线检查位掩码,我相信std
已经为此构建了一些东西。
- 空基优化子对象的地址
- 关闭||运算符优化
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 返回值优化:显式移动还是隐式
- 人脸跟踪arduino代码的优化
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 纯函数,为什么没有优化
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 如何以优化的方式同时迭代两个间距不相等的数组
- 小字符串优化(调试与发布模式)
- 浮点定向舍入和优化
- Visual Studio 调试优化如何工作?
- 为什么开关的优化方式与 c/c++ 中的链接不同?
- 线性优化目标函数中的绝对值
- GCC 会优化内联访问器吗?
- gcc 如何优化此循环?
- 如何防止 CUDA-GDB 中的<优化输出>值
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 使用 std::p air 进行返回值优化