Turple多元组和bitset类型

一、turple元组不同于pair容器,它接受任意多个不同的成员,它的头文件为"#include "

定义:

tuple turple_three;

初始化

tuple turple_three{"dada", 1, 23.33,'d'};
tuple turple_three = make_tuple(1,2,3,4);

使用

auto book = get<0>(turple_three);
auto price = get<1>(turple_three);
get<1>(turple_three)*=0.8;

tuple常用的以个用途是从一个函数返回多个值。

typedef tuple::size_type, 
vector::const_iterator, 
vector::const_iterator> matches;//书店的索引,两个指向书店vector中元素的迭代器

vector findBook(const vector> &files, const string &book)
{
    vector ret; //一个tuple的vector
    for(auto it = files.cbegin( ); it != files,cend( ); ++it)
    {
        auto found = equal_range(it->cbegin( ), it->cend( ), book, compareIsbn);
        if(found.first != found.second)
            ret.push_back(make_tuple( it - files.cbegin( ), found.first, found.second));
    }
    return ret;
}

void reportResults(istream &in, ostream &os, const vector> &files)
{
    string s;
    while( in>> s)
    {
        auto trans = findBook(files, s);
        if (trans.empty( ))
        {
            cout << s << " not found in any stores" <(store) << " sales: "
                << accumulate(get<1>(store>, get<2>(store), Sales_data(s))
                <

二、bitset类是一个类模板,头文件"#include "它类似array类,具有固定大小。在定义一个bitset类时需要声明它包含多少个二进制位

定义:

bitset<32> bitvec(1U);// 32位,低位是1,其他位为0

bitset b;//b有n位,每一位均为0

bitset b(u);//b是unsigned long long 值u得低n位拷贝


bitset b(s, pos, m, zero, one);//b是string s从位置pos开始m个字符得拷贝,s只能包含字符zero或one

初始化:

bitset<13> b(0xbeef);//二进制序列为:1111011101111

bitset<13> b(“1100”);

string st("010101010100");
bitset<32> b(st, 0, 6, '0', '1');

string str("1101011011110111001100");
bitset<32> b(st, 5, 4);
bitset<4> b(st,  4);//使用最后四个字符

bitset支持的操作

b.any();  //b中是否含有1
b.all();  //b中所有位是否都为1
b.none(); //b中所有位是否都不为1
b.count();  //b中1的个数
b.size(); //b的位数
b.test(pos)    若pos位置的是位置的,则返回true
b.set(pos, v)    将位置pos处的位设置为bool值v。
b.set( )
b.reset(pos)        将pos处的位复位或将b中所有位复位
b.reset( )
b.flip(pos)        改变位置pos处的位的状态或改变b中每一位的状态
b.flip( )
b[pos]        访问b中位置pos处的位;
b.to_ulong( )    返回一个unsigned long或一个unsigned long long值,其位模式雨b相同
b.to_string(zero, one) 返回一个string,表示b中的位模式。zero和one的默认分别是0、1,用来表示b中的0、1

赋值:
b.[0]=0;

读写操作
bitset<16> bits;
cin>>bits;
cin<

 

三、正则表达式,用于校验一个string, 字符范围内的迭代器对,一个字符指针的值是否和给定的字符对匹配,具体的用法参考下面链接:https://blog.csdn.net/fengbingchun/article/details/54835571

 

int test_regex_search()
{
	std::string pattern{ "http|hppts://\\w*$" }; // url
	std::regex re(pattern);
 
	std::vector str{ "http://blog.csdn.net/", "https://github.com/",
		"abcd://124.456", "abcd https://github.com/123" };
 
	/* std::regex_search:
		类似于regex_match,但它不要求整个字符序列完全匹配
		可以用regex_search来查找输入中的一个子序列,该子序列匹配正则表达式re
	*/
 
	for (auto tmp : str) {
		bool ret = std::regex_search(tmp, re);
		if (ret) fprintf(stderr, "%s, can search\n", tmp.c_str());
		else fprintf(stderr, "%s, can not search\n", tmp.c_str());
	}
 
	return 0;
}

 

你可能感兴趣的:(C++基础)