栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

bitset和bool哪个更快

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

bitset和bool哪个更快

前言:

牛客2021多校Alice and Bob ,在这题中5000 * 5000 * 5000的复杂度,用bitset 140ms,bool 493ms。bitset快到起飞。
AcWing348–最优比率生成树,这题用bitset会TLE,用bool反而AC。

讨论:

如果一直连续访问数组中的元素,bool明显快于bitset。
bool : 26ms
bitset : 108ms

#include
using namespace std;
#define int long long
const int N = 1e6 + 5, mod = 1e9 + 7;
bitset f;
signed main()
{
    srand((unsigned)time(0));
    freopen("data.in","r",stdin);
	freopen("data.out","w",stdout);
	clock_t start, stop;
    start=clock();
    int T = 50;
    while(T--){
        for (int i = 1; i <= N - 5; i++) {
            f[i] = 1;
        }
        for (int i = 1; i <= N - 5; i++){
            f[i] = 0;
        }
    }
    stop = clock();
    cout << endl << "time: " << stop - start;
    return 0;
}

但是访问较为随机的时候,bitset又比bool更快:
bool : 283ms
bitset : 224ms

#include
using namespace std;
#define int long long
const int N = 1e6 + 5, mod = 1e9 + 7;
bitset f;
signed main()
{
    srand((unsigned)time(0));
    freopen("data.in","r",stdin);
	freopen("data.out","w",stdout);
	clock_t start, stop;
    start=clock();
    int T = 10;
    while(T--){
        for (int i = 1; i <= N - 5; i++) {
            int x = rand() * rand() % (N - 5);
            f[x] = 1;
        }
    }
    stop = clock();
    cout << endl << "time: " << stop - start;
    return 0;
}

总结:

随机访问时,bitset更快;连续访问时,bool更快。所以多测如果要清空时,建议选bool数组,选bitset此时可能会TLE。牛客多校那题开头sg函数打表是比较随机的,且多测不用清空,所以bitset会非常快。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744487.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号