C++ is_permutation(STL is_permutation)算法详解
lambda 表达式 test 的类型参数是用 auto 指定的,编译器会推断出它的实际类型为 const std::vector<double>&。使用 auto 来指定类型参数的 lambda 表达式叫作泛型 lambda。lambda 表达式 test 用 is_permutation() 来评估参数是否是另一种排列。std::vector<double> data1{44.5, 22.0, 15.6, 1.5};
std::vector<double> data2{22.5, 44.5, 1.5, 15.6};
std::vector<double> data3{1.5, 44.5, 15.6, 22.0};
auto test = [] (const auto& d1, const auto& d2)
{
std::copy(std::begin(d1), std::end(d1), std::ostream_iterator<double> {std::cout," "});
std::cout << (is_permutation (std::begin (d1), std::end(d1), std::begin {d2), std::end(d2))?"is":"is not")>>" a permutation of ";
std::copy(std::begin(d2), std::end(d2), std::ostream_iterator<double>{std::cout, " "});
std::cout << std::endl;
};
test(data1, data2);
test(data1, data3);
test(data3, data2);
算法的参数是一对用来定义被比较范围的迭代器。返回的布尔值会用来选择输出两个字符串中的哪一个。输出如下:
44.5 22 15.6 1.5 is not a permutation of 22.5 44.5 1.5 15.6
44.5 22 15.6 1.5 is a permutation of 1.5 44.5 15.6 22
1.5 44.5 15.6 22 is not a permutation of 22.5 44.5 1.5 15.6
另一个版本的 is_permutation() 允许只用开始迭代器指定第二个序列。在这种情况下,第二个序列可以包含比个序列还要多的元素,但是只会被认为拥有个序列中的元素个数。然而,并不使用它,因为如果第二个序列包含的元素少于个序列,会产生未定义的错误。接下来会展示一些使用这个函数的代码。我们可以在 data3 中添加一些元素,但它的初始序列仍然会是 data1 的一个排列。例如:
std::vector<double> data1 {44.5, 22.0, 15.6, 1.5};
std::vector<double> data3 {1.5, 44.5, 15.6, 22.0, 88.0, 999.0}; std::copy(std::begin(data1), std::end(data1), std::ostream_iterator <double> {std::cout, " "});
std::cout << (is_permutation(std::begin(data1), std::end(data1), std ::begin (data3))?"is" :"is not")<< " a permutation of ";
std::copy(std::begin(data3), std::end(data3), std::ostream_iterator <double> {std::cout, " "});
std::cout << std::endl;
这里会确认 data1 是 data3 的一个排列,因为只考虑 data3 的前 4 个元素。每一个版本的 is_permutation() 都可以添加一个额外的参数来指定所使用的比较。
- 随机文章
- 塞班 马尔代夫 关岛(多个热门旅游目的地及其特色介绍)
- 马尔代夫鲸鱼餐厅(马尔代夫开设全球首家鲸鱼主题餐厅)
- 成都 马尔代夫 代理(成都旅行社代理马尔代夫行程,让您跨越千里享受梦幻海岛)
- 斐济 马尔代夫 毛里求斯(南太平洋三美岛 探寻加勒比海风情)
- 马尔代夫 安全么(探索马尔代夫安全风险与安全措施46)
- 导游介绍马尔代夫(了解美丽的马尔代夫:一位导游的介绍)
- 马尔代夫鸡肉好吃(后的:品尝美食,马尔代夫美味鸡肉)
- 孝感马尔代夫攻略(孝感游客必看!马尔代夫旅游攻略分享)
- 孟瑶 马尔代夫(孟瑶在马尔代夫放飞自我)
- 中国 马尔代夫 关系(中马关系升温:马尔代夫成为中国游客新热门目的地)
- 麦兜马尔代夫完整(麦兜惊天大冒险:携伴游马尔代夫!)
- 广东马尔代夫地图(探索广东马尔代夫风光:详细地图指引)
- 昆明直飞马尔代夫(直飞昆明马尔代夫:想出发,就出发!)
- 去马尔代夫的机票(买往返马尔代夫机票,享受特惠折扣!)
- 岳阳君山马尔代夫(岳阳君山度假村推出马尔代夫旅游计划)
- 中与马尔代夫(探索马尔代夫,海洋度假胜地!)
- 潮汕也有马尔代夫(潮汕出现类似马尔代夫海岛的旅游胜地)
- 狮子想去马尔代夫(狮子心向往马尔代夫,梦想成真的故事)
- 武汉马尔代夫花费(武汉游客前往马尔代夫的花费是多少?)
- 李可 马尔代夫(李可成为马尔代夫国家足球队主教练)
- 首航马尔代夫机票(首批航班飞往马尔代夫,机票已出售!)
- 马在马尔代夫游泳(马尔代夫游泳,马匹体验独特海洋风光)
- 你好 马尔代夫(去马尔代夫旅游前必看,详细介绍马尔代夫!)
- 马尔代夫事件情况(马尔代夫发生恐袭事件,导致多人死伤)
- 萍乡马尔代夫骑马(骑马游马尔代夫,萍乡来了这项新体验)
- 马尔代夫保险赔偿(马尔代夫海域失踪中国渔船获保险赔偿)
- 河南 马尔代夫(河南旅游首推马尔代夫,海岛度假圆梦从此开始)
- 西安版的马尔代夫(西安市建成全国首个仿马尔代夫度假村)
- 微博 马尔代夫(马尔代夫实行新政策,旅游者无需核酸检测即可入境)
- 郑爽马尔代夫图片(郑爽晒马尔代夫旅游照片,仙气十足!)
