Turple多元组和bitset类型

本文深入探讨了C++标准模板库(STL)中的关键组件,包括turple元组的使用和特性,bitset类的详细解释及其操作,以及正则表达式的应用。通过实例展示了如何利用这些工具提高代码效率和功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

定义:

tuple<string, int, double, char> turple_three;

初始化

tuple<string, int, double, char> turple_three{"dada", 1, 23.33,'d'};
tuple<size_t, size_t, size_t, size_t> 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<vector<Sales_data>::size_type, 
vector<Sales_data>::const_iterator, 
vector<Sales_data>::const_iterator> matches;//书店的索引,两个指向书店vector中元素的迭代器

vector<matches> findBook(const vector<vector<Sales_data>> &files, const string &book)
{
    vector<matches> 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<vector<Sales_data>> &files)
{
    string s;
    while( in>> s)
    {
        auto trans = findBook(files, s);
        if (trans.empty( ))
        {
            cout << s << " not found in any stores" <<endl;
            continue;
        }
        for (const tuto & stre : trans)
            os << "stre " << get<0>(store) << " sales: "
                << accumulate(get<1>(store>, get<2>(store), Sales_data(s))
                <<endl;
    }
}

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

定义:

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

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

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


bitset<n> 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<<bits<<endl;

 

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

 

int test_regex_search()
{
	std::string pattern{ "http|hppts://\\w*$" }; // url
	std::regex re(pattern);
 
	std::vector<std::string> str{ "http://blog.youkuaiyun.com/", "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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值