bitset位运算
添加头文件< bitset >,bitset中的字符顺序与字符串中的字符顺序相反
#include <iostream>
#include<bitset>
using namespace std;
int main() {
// 创建一个bitset
// bitset <5> b; 方法一: 二进制数位为5,默认全为0
// bitset<5> b("11"); 方法二:二进制数位为5,低两位为11,高位补0,即为00011
// 方法三: 二进制数位为5,传入十进制无符号数,转化为二进制保存
bitset<5> b(19);
cout << b << endl;
// 方法四: bitset <n> b(s,pos,n);
// 可将字符串的部分截取为bitset赋值 (字符串类似与大端存储)
string s = "01011011";
bitset <5> b1(s, 0, 5); // 字符串s下标为0开始的后5位,置入b1(类似与方法二的直接写入五位字符)
cout << "字符串截取的b1为:" << b1 << endl; // 结果为01011
// bitset可视为0/1字符数组,类似小端存储数据,可用变量i遍历
for (int i = 0; i < b.size(); i++)
cout << b[i] << " ";
cout << endl;
cout << "二进制是否存在1:" << b.any() << endl;
cout << "二进制中是否不存在1:" << b.none() << endl;
cout << "二进制中1的个数:" << b.count() << endl;
cout << "二进制的0/1个数:" << b.size() << endl;
cout << "下标为i的元素是否为1:" << b.test(0) << endl;
// 按位取反 10011->01100
b.flip(); // b.flip(i) 下标为i的元素取反
cout << "取反后的结果为:" << b << endl;
// 将二进制转化为十进制unsigned long型(01100B=12D)
unsigned long d = b.to_ulong();
cout << "十进制结果为:" << d << endl;
// 全部置零
b.reset(); // b.reset(i) ,下标为i的元素置零
cout << "reset后结果:" << b << endl;
return 0;
}
运行结果:

sort
sort:排序。sort(v.begin(), v.end(), cmp) 或 sort(a + begin, a + end, cmp),其中 end 是排序的数组最后一个元素的后一位,cmp 为自定义的比较函数。添加头文件< algorithm>
#include <iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
// 使用cmp定义从大到小的排序(返回值为假,则将x,y交换)
// 注意:cmp的返回值不能为 >= 或 <=
bool cmp1(int x, int y) {
return x > y;
}
// 创建一个学生结构体
struct stu {
int age;
string name;
};
// 对结构体进行排序
bool cmp2(stu a, stu b) {
if (a.age != b.age)
return a.age < b.age;
else
return a.name < b.name;
}
int main() {
// sort 默认是从小到大的排序,cmp可以定义一些较为复杂的规则
vector<int> v1;
for (int i = 0; i < 10; i++)
v1.push_back(i);
for (auto p = v1.begin(); p != v1.end(); p++)
cout << *p << " ";
cout << endl;
// sort(v1.begin(),v1.end(),cmp),指针区间范围为左闭右开
sort(v1.begin(), v1.end(), cmp1);
for (auto p = v1.begin(); p != v1.end(); p++)
cout << *p << " ";
cout << endl;
stu s[3];
for (int i = 0; i < 3; i++)
cin >> s[i].name >> s[i].age;
// 对结构体先按年龄从小到大排序,年龄相同按照姓名排序
sort(s, s + 3, cmp2);
for (int i = 0; i < 3; i++)
cout << s[i].name << " " << s[i].age<<endl;
return 0;
}
运行结果:

cctype
对字符进行操作的一些函数,头文件< cctype>
#include <iostream>
#include<cctype>
using namespace std;
int main() {
char c = 'A';
cout << "是否为字母:" << isalnum(c) << endl;
cout << "是否为小写字母:" << islower(c) << endl;
cout << "是否为大写字母:" << isupper(c) << endl;
cout << "是否为字母或数字:" << isalnum(c) << endl;
cout << "是否为空格 or /t or /n:" << isspace(c) << endl;
char s1 = tolower(c);
cout << "转换为小写为:" << s1 << endl;
char s2 = toupper(s1);
cout << "再转换为大写为:" << s2 << endl;
return 0;
}
运行结果:

509

被折叠的 条评论
为什么被折叠?



