一、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
定义:
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;
}