bitset以及set的使用

1.bitset的介绍

类模板 bitset 表示一个 N 位的固定大小序列。可以用标准逻辑运算符操作 bitset,并将它与字符串和整数相互转换。对于字符串表示和移位操作的列举方向来说,这个序列被当做最低索引元素位于右侧,类似于整数的二进制表示。这个类提供了一些方便的方法来操作位,例如设置、重置、翻转位等。bitset也叫位图

1.1bitset的创建

std::bitset<N> bitset1; // 创建一个长度为 N 的 bitset,所有位都被初始化为 0
std::bitset<N> bitset2(value); // 使用二进制整数 value 初始化一个长度为 N 的 bitset
std::bitset<32> bitset21(0xffff);      // bits 0 ... 15 are set to 1; 16 ... 31 are 0
std::bitset<128> bitset22(0xffff);     // bits 32 through 127 initialized to zero
 
std::bitset<N> bitset3(string); // 使用二进制字符串 string 初始化一个长度为 N 的 bitset
string str("1111111000000011001101");
std::bitset<N> bitset31(str);    //用整个字符串来初始化bitset
std::bitset<32> bitset32(str, 5, 4); // 4 bits starting at str[5], 1100
std::bitset<32> bitset33(str, str.size() - 4);     // use last 4 characters
 
std::bitset<N> bitset4(bitset); // 使用另一个 bitset 初始化一个长度为 N 的 bitset
std::bitset<n> bitset5(bitset4, pos, n); //bitset5是bitset4中从位置pos开始的n个位的副本

1.2.bitset的操作

bitset有许多函数,bitset在头文件<bitset>中

#include<iostream>
#include<bitset>
using namespace std;
int main(){
	bitset<20> bt;
	bt[0]=1; 
	cout<<bt<<endl;
	cout<<sizeof bt<<endl;
	cout<<bt.count()<<endl; //计算bt里面有多少 1
	cout<<bt.set(4)<<endl; //bt在pos处的二进制置为 1
	cout<<bt.reset()<<endl; //bt所有二进制位都置为 0
	bt.flip(); //bt中所有二进制位逐位取反
	cout<<bt.none()<<endl; //bt中是否有 1在里面,是为 1,没有为 0
	cout<<bt.any()<endl; //判断bt内是否有数据,有为 1,没有为 0
	cout<<bt.test(4)<<endl; //判断当前位置是否为 1 
	 
} 
#include<bits/stdc++.h>
using namespace std;
int main(){
	bitset<20> bt(1234);
	cout<<bt<<endl; //bitset 里面只有 0或 1,为 1234的二进制表示
	string s="1010001";
	bitset<10> bi(s);
	cout<<bi<<endl; //如果是字符串格式,则直接存入 
	cout<<bi.to_ulong()<<endl; //将bi中二进制转化为十进制
	//转化为 unsigned long
	cout<<bt.to_string()<<endl; //以二进制打印
	// bitset之间是不能进行大小比较的,只能进行相等和不相等的的比较
	  
} 

1.3.bitset运算符的使用

int main()
{
	//>>输入、<<输出运算符
	bitset<8> bs;
	cin >> bs;//10100
	cout << bs << endl;//00010100
	//复合赋值运算符
	bitset<8> bs1("101011");
	bitset<8> bs2("100100");
	cout << (bs1 >>= 2) << endl;//00001010
	cout << (bs2 |= bs1) << endl;//00101110
	//位运算符
	bitset<8> bs3("10010");
	bitset<8> bs4("11001");
	cout << (bs3 & bs4) << endl;//00010000
	cout << (bs3 ^ bs4) << endl;//00001011
	//operator[]运算符
	cout << bs3[4] << endl;//1
	cout << bs3[2] << endl;//0
}

2.STL中set的介绍

set就是集合,STL的set用二叉树实现,集合中的每个元素只出现一次,里面的元素是唯一的(参照数学中集合的互斥性),并且是排好序的(默认按键值升序排列),访问元素的时间复杂度是O(log以2为底,n的对数)

不能直接修改容器中元素的值,必须先删除原有的元素,再插入新元素

set在头文件<set>中,set具有迭代器set<int>::iterator i ;

set<int> q;     //以int型为例 默认按键值升序
set<int,greater<int>> p;  //降序排列 
int x;
q.insert(x);	//将x插入q中
q.erase(x);		//删除q中的x元素,返回0或1,0表示set中不存在x
q.clear();		//清空q
q.empty();		//判断q是否为空,若是返回1,否则返回0
q.size();		//返回q中元素的个数
q.find(x);		//在q中查找x,返回x的迭代器,若x不存在,则返回指向q尾部的迭代器即 q.end()
q.lower_bound(x); //返回一个迭代器,指向第一个键值不小于x的元素
q.upper_bound(x); //返回一个迭代器,指向第一个键值大于x的元素

q.rend();		  //返回第一个元素的的前一个元素迭代器
q.begin();		  //返回指向q中第一个元素的迭代器

q.end();		 //返回指向q最后一个元素下一个位置的迭代器
q.rbegin();		 //返回最后一个元素
q.swap(p)      //交换q和p的内容

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值