Something of C++ standard library

本博客转自:https://originals-tz.github.io/

tuple

#include <tuple>

语法

能够把不同类型的数据组合成单一对象

语法作用
tuple<type1, type2, type3...typeN> t成员数为N,第i个成员类型是typei
tuple<type1...typeN> t(v1...vn)初始化
make_tuple(v1...vn)根据实参构造一个tuple,类型根据实参推断
t1 == t2成员完全相等则为真
t1 relop t2使用关系运算符,前提是t1,t2的成员数目相等
get<i>(t)返回第i个数据的引用
tuple_size<tupleType>::value通过一个tuple类型初始化
tuple_element<i,tupleType>::type通过一个整型和一个tuple类型来初始化

定义和初始化

需要注意的是,tuple的构造函数是explicit,必须直接初始化

tuple<int, double, size_t> treeD;
tuple<int, string, float> tr(1, "hello", 1.3f);

使用make_tuple

auto f = make_tuple(1, 3.4f, "hello");

访问

tuple<int, string, float> tr(1, "hello", 1.3f);
auto value1 = get<0>(tr);
auto value2 = get<1>(tr);
auto value3 = get<2>(tr);

tuple_size(tupleType)::value & tuple_element<i, tupleType>::type

typedef decltype(tr) trans;
//获取数量
size_t sz = tuple_size(trans)::value;
//获取类型
tupel_element<0, trans>::type cnt = get<0>(tr);

bitset

更方便的位运算
#include <bitset>

语法

语法作用
bitset<n> bb有n位,每一位都是0,此构造函数是一个constexpr
bitset<n> b(u)b是unsigned long long值u的低n位的拷贝,如果n大于unsigned long long那么其余位被设置成0
bitset<n> b(s, pos, m , zero, one)在字符串string s的pos处开始m个拷贝,字符串s只能由0,1构成,后4个参数有默认值
bitset<n> b(cp, pos, m, zero, one)cp是字符数组

初始化

bitset<13> bit1(0xbeef);
bitset<32> bit2("1100");
bitset<32> bit3("1100",1,3);

操作

如果bitset对象中有一个或多个二进制位置为1,则any操作返回true,也就是说,其返回值等于1;

相反,如果bitset对象中的二进制位全为0,则none操作返回true。

#include <iostream>
#include <bitset>
using namespace std;

int main(){
    //bitset 使用整数初始化bitset
    bitset<3> bs(7);
    //输出bs各个位的值
    cout<<"bs[0] is "<<bs[0]<<endl;
    cout<<"bs[1] is "<<bs[1]<<endl;
    cout<<"bs[2] is "<<bs[2]<<endl;
    //下面的语句会抛出outofindexexception
    //cout<<"bs[3] is "<<bs[3]<<endl;

    //使用字符串初始化bitset
    //注意:使用string初始化时从右向左处理,如下初始化的各个位的值将是110,而非011
    string strVal("011");
    bitset<3> bs1(strVal);
    //输出各位  
    cout<<"bs1[0] is "<<bs1[0]<<endl;
    cout<<"bs1[1] is "<<bs1[1]<<endl;
    cout<<"bs1[2] is "<<bs1[2]<<endl;
    //cout输出时也是从右边向左边输出
    cout<<bs1<<endl;

    //bitset的方法
    //any()方法如果有一位为1,则返回1
    cout<<"bs1.any() = "<<bs1.any()<<endl;

    //none()方法,如果有一个为1none则返回0,如果全为0则返回1
    bitset<3> bsNone;
    cout<<"bsNone.none() = " <<bsNone.none()<<endl;

    //count()返回几个位为1
    cout<<"bs1.count() = "<<bs1.count()<<endl;

    //size()返回位数
    cout<<"bs1.size() = "<<bs1.size()<<endl;

    //test()返回某一位是否为1
    //flip()诸位取反
    bitset<3> bsFlip = bs1.flip();
    cout<<"bsFlip = "<<bsFlip<<endl;

    //to_ulong
    unsigned long val = bs1.to_ulong();
    cout<<val;
}

正则表达式

#include <regex>

组件含义
regex一个正则表达式的类
regex_match匹配
regex_search搜索
regex_replace使用给定格式替换一个正则表达式
sregex_iterator遍历所有匹配的子串
smatch容器,保存搜索结果
ssub_matchstring中匹配子表达式的结果

这个坑太大了,以后再填

随机数(random)

算了,这又是个大坑,以后再填

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值