c++primer之标准库特殊设施

一、一个tuple可以有任意数量的成员

二、tuple的构造函数是explicit的,必须使用直接初始化

三、make_tuple函数使用初始值的类型来推断tuple的类型

四、tuple一个常见用途是从一个函数返回多个值

五、当定义一个bitset时,需要声明它包含多少个二进制位

六、一个随机数引擎类可以生成unsigned随机数序列;一个随机数分布类使用一个引擎类生成指定类型的、给定范围的、服从特定概率分布的随机数

七、传递给分布对象的是引擎对象本身,即u(e),如果将调用写成了u(e()),含义将变为e生成的下一个值传递给u,会导致一个编译错误

八、种子就是一个数值,引擎可以利用它从序列中一个新位置重新开始生成随机数

九、位引擎设置种子的方式有2种: 在创建引擎对象时提供种子,或者调用引擎的seed成员

十、每个分布模板都有一个默认模板实参,生成浮点值的分布类型默认生成double值,而生成整型值的分布默认生成int值,由于分布类型只有一个模板参数,因此当希望使用默认随机数类型时要在模板名之后使用空尖括号

十一、有一个分布不接受模板参数,即bernoulli_distribution,因为它是一个普通类,而非模板,此分布总是返回一个bool值,它返回true的概率是一个常数,此概率的默认值是0.5

十二、一个操纵符是一个函数或是一个对象,会影响流的状态,并能用作输入或输出运算符的运算对象,返回它所处理的流对象,因此可以在一条语句种组合操纵符和数据

十三、操纵符用于2类输出控制,控制数值的输出形式以及控制补白的数量和位置

// 每次调用将返回相同的vector
vector<unsigned> badRandVec()
{
	default_random_engine e;
	uniform_int_distribution<unsigned> u(0, 9);
	vector<unsigned> ret;
	for (size_t i = 0; i < 20; ++i) {
		ret.push_back(u(e));
	}
	return ret;
}

vector<unsigned> goodRandVec()
{
	static default_random_engine e;
	static uniform_int_distribution<unsigned> u(0, 9);
	vector<unsigned> ret;
	for (size_t i = 0; i < 20; ++i) {
		ret.push_back(u(e));
	}
	return ret;
}

int main()
{
	tuple<string, vector<double>, int, list<int>> someVal(
		"constants",
		{3.12, 2.76},
		43,
		{0, 1, 2, 3, 4, 5}
	);

	tuple<size_t, size_t, size_t> threeD{ 1, 2, 3 };

	// 使用get访问tuple的成员
	cout << get<0>(someVal) << endl;
	cout << get<0>(threeD) << endl;

	typedef decltype(threeD) trans;
	size_t sz = tuple_size<trans>::value;
	cout << sz << endl;
	tuple_element<1, trans>::type cnt = get<1>(threeD);
	cout << cnt << endl;

	bitset<13> bitvec1(0xbeef);
	bitset<20> bitvec2(0xbeef);
	bitset<128> bitvec3(~0ULL);
	bitset<32> bitvec4("1100");
	string str("1111111000000011001101");
	bitset<32> bitvec5(str, 5, 4);

	string pattern("[^c]ei");
	pattern = "[[:alpha:]]*" + pattern + "[[:alpha:]]*";
	regex r(pattern);
	smatch results;
	string testStr = "receipt freind theif receive";
	if (regex_search(testStr, results, r)) {
		cout << results.str() << endl;
	}

	//uniform_real_distribution<double> u(0, 1);
	//uniform_int_distribution<unsigned> u(0, 9);
	//default_random_engine e;
	default_random_engine e(32767);
	for (size_t i = 0; i < 10; ++i) {
		cout << e() << endl;
		//cout << u(e) << " ";
	}
	cout << endl;
	cout << "min:" << e.min() << "max:" << e.max() << endl;
 
	
	cout << "Hex: " << hex << 20 << " " << 1024;

	return 0;
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值