当前位置: 首页 > news >正文

培训网站模板免费廊坊网站建设公司

培训网站模板免费,廊坊网站建设公司,少儿编程scratch,临海网站建设C初学者指南-5.标准库(第二部分)–排序序列操作 文章目录 C初学者指南-5.标准库(第二部分)--排序序列操作二分查找binary_searchlower_boundupper_boundequal_rangeincludes 合并mergeinplace_merge 设置操作set_unionset_intersectionset_differenceset_symmetric_difference …

C++初学者指南-5.标准库(第二部分)–排序序列操作

文章目录

  • C++初学者指南-5.标准库(第二部分)--排序序列操作
    • 二分查找
      • binary_search
      • lower_bound
      • upper_bound
      • equal_range
      • includes
    • 合并
      • merge
      • inplace_merge
    • 设置操作
      • set_union
      • set_intersection
      • set_difference
      • set_symmetric_difference
    • 相关内容

不熟悉 C++ 的标准库算法? ⇒ 简介

前提条件:必须对输入序列进行排序。
任何排序序列算法都不会检查这一点。

二分查找

在一个包含N个元素的有序序列中查找一个元素可以在O(log N)的时间内完成。
在最坏的情况下,在一个无序序列中找到一个元素需要 N 步。
二分查找算法

binary_search

在这里插入图片描述
用二分查找算法在序列中查找一个值
cppreference

std::vector<int> v {1,2,3,4,5,6,7,8};
// search in subrange (as in image):
cout << binary_search(begin(v)+2, begin(v)+7, 4);  // true
// search in entire vector:
cout << binary_search(begin(v), end(v), 8);  // true
cout << binary_search(begin(v), end(v), 9);  // false

运行示例程序

在这里插入图片描述
cppreference

lower_bound

在这里插入图片描述
返回序列中第一个不小于第三个参数值的迭代器,否则返回范围序列末尾位置迭代器。
cppreference

std::vector<int> v {0,1,2,3,4,5,6,7,8};
// find in subrange (as shown in image):
auto i = lower_bound(begin(v)+3, begin(v)+7, 5);
if (i != end(v)) {  // true ⇒ foundcout << *i;  // 5
}
// find in entire vector
auto j = lower_bound(begin(v), end(v), 2);
if (j != end(v)) {  // true ⇒ foundcout << *j;  // 2
}

运行示例代码
在这里插入图片描述
cppreference

upper_bound

在这里插入图片描述
返回序列中第一个大于第三个参数值的迭代器,否则返回范围序列末尾位置迭代器。
cppreference

std::vector<int> v {0,1,2,3,4,5,6,7,8};
// find in subrange (as shown in image):
auto i = upper_bound(begin(v)+3, begin(v)+7, 5);
if (i != end(v)) {  // true ⇒ foundcout << *i;  // 6
}
// find in entire vector
auto j = upper_bound(begin(v), end(v), 2);
if (j != end(v)) {  // true ⇒ foundcout << *j;  // 3
}

运行示例代码
在这里插入图片描述
cppreference

equal_range

在这里插入图片描述
在序列中查找第三个参数值,返回不小于此值的第一个元素的迭代器和第一个大于此值的第一个元素的迭代器对。
cppreference

std::vector<int> v {1,1,2,3,4,5,5,5,6,6,7,7,8};
// find in subrange (as shown in image):
auto r5 = equal_range(begin(v)+3, begin(v)+11, 5);
// erase range of '5'
v.erase(r5.first, r5.second);
for (int x : v) { cout << x << ' '; }  // 1 1 2 3 4 6 6 7 7 8
// find in entire vector
auto r6 = equal_range(begin(v), end(v), 6);
// erase range of '6'
v.erase(r6.first, r6.second);
for (int x : v) { cout << x << ' '; }  // 1 1 2 3 4 7 7 8

运行示例代码
在这里插入图片描述
cppreference

includes

在这里插入图片描述
如果范围1中可以找到范围2则返回true,否则返回false。
cppreference

std::vector<int> r1 {0,1,2,3,4,5,6,7};
std::vector<int> r2 {0,1,3,5,6,8,9};
// as shown in image
cout << includes(begin(r1), end(r1), begin(r2)+1, begin(r2)+5);  // true
// entire r2 in r1?
cout << includes(begin(r1), end(r1), begin(r2), end(r2));  // true

运行示例代码
在这里插入图片描述
cppreference

合并

两个已排序的序列可以在线性时间内合并成一个排序序列。
合并算法

merge

在这里插入图片描述
cppreference

std::vector<int> in1 {0,2,4,6,7};
std::vector<int> in2 {1,3,5,8};
// make sure output can fit all elements
std::vector<int> out;
out.resize(in1.size() + in2.size());
merge(begin(in1), end(in1), begin(in2), end(in2), begin(out));
for (int x : out) { cout << x << ' '; }  // 0 1 2 3 4 5 6 7 8

运行示例代码
在这里插入图片描述

inplace_merge

在这里插入图片描述
cppreference

std::vector<int> v {0,2,3,5,6,1,3,4,8};
inplace_merge(begin(v), begin(v)+5, end(v));
for (int x : v) { cout << x << ' '; }  // 0 1 2 3 3 4 5 6 8

运行示例代码
在这里插入图片描述
cppreference

设置操作

像并集、交集等集合操作可以在排序列表上以线性时间进行,因此比在未排序列表上更快。

set_union

在这里插入图片描述
cppreference

std::vector<int> s1 {0,1,2,2,4,4,5};
std::vector<int> s2 {1,1,3,4,5};
// make sure output could fit all elements
std::vector<int> out;
out.resize(s1.size() + s2.size());
auto e = set_union(begin(s1), end(s1), begin(s2), end(s2), begin(out));
// shrink output to fit
out.erase(e, end(out));
for (int x : out) { cout << x << ' '; }  // 0 1 1 2 2 3 4 4 5

运行示例代码
在这里插入图片描述
cppreference

set_intersection

在这里插入图片描述
cppreference

std::vector<int> s1 {1,2,4,6,7};
std::vector<int> s2 {2,3,4,7};
// make sure output could fit all elements
std::vector<int> out;
out.resize(std::max(s1.size(),s2.size()));
auto e = set_intersection(begin(s1), end(s1), begin(s2), end(s2), begin(out));
// shrink output to fit
out.erase(e, end(out));
for (int x : out) { cout << x << ' '; }  // 2 4 7

运行示例代码
在这里插入图片描述
cppreference

set_difference

在这里插入图片描述
cppreference

std::vector<int> s1 {1,2,4,6,7};
std::vector<int> s2 {2,3,4,7};
// make sure output could fit all elements
std::vector<int> out;
out.resize(std::max(s1.size(),s2.size()));
auto e = set_difference(begin(s1), end(s1), begin(s2), end(s2), begin(out));
// shrink output to fit
out.erase(e, end(out));
for (int x : out) { cout << x << ' '; }  // 1 6

运行示例代码
在这里插入图片描述
cppreference

set_symmetric_difference

在这里插入图片描述
cppreference

std::vector<int> s1 {1,2,4,6,7};
std::vector<int> s2 {2,3,4,7};
// make sure output could fit all elements
std::vector<int> out;
out.resize(std::max(s1.size(),s2.size()));
auto e = set_symmetric_difference(begin(s1), end(s1), begin(s2), end(s2), begin(out));
// shrink output to fit
out.erase(e, end(out));
for (int x : out) { cout << x << ' '; }  // 1 3 6

运行示例代码
在这里插入图片描述
cppreference

相关内容

视频:binary_search, lower_bound, upper_bound by Conor Hoekstra
视频:set_union, set_difference, set_… by Conor Hoekstra
标准算法概述
C++标准库算法介绍
标准序列容器(vector、deque、list、…)
标准关联容器(map、set、…)
标准序列视图
cppreference:算法库
cppreference:容器库
视频:什么是 C++ 标准库?
视频:一小时内掌握 105 个 STL 算法 (Jonathan Boccara,2018)
C++ 之旅:容器和算法
算法概述表:
在这里插入图片描述

附上原文链接
如果文章对您有用,请随手点个赞,谢谢!^_^

http://www.tj-hxxt.cn/news/39984.html

相关文章:

  • 翔安区建设网站武汉久都seo
  • 哪个公司的网站做的好扬州网站推广公司
  • 做日本暖暖小视频网站长沙营销推广
  • 流速cms是什么意思天津百度快照优化公司
  • wordpress 密码忘记了seo推广软件排名
  • 专门做网站的软件百度app关键词优化
  • 推广网站优化seo教程上排名站长工具seo综合查询烟雨楼
  • 做淘客网站要多大的服务器seo网站推广多少钱
  • 做外包的网站有哪些问题网页设计制作网站图片
  • 浏览器禁止网站怎么做微帮推广平台怎么加入
  • 外贸soho做网站怎么做seo网站推广培训
  • wordpress大前端5.0搜索引擎排名优化价格
  • 怎样做建网站做淘客有友情链接的网站
  • 网络下载的网站模板能直接上传到虚拟主机做网络推广的团队
  • 京华建设科技有限公司网站外链代发软件
  • 怎样将自己做的网页加入网站冯站长之家官网
  • 中国做的最好的网站有哪些seo排名赚能赚钱吗
  • dede减肥网站源码深圳网络营销推广培训
  • 网站建设百灵鸟手机网站模板
  • 网站链接如何做日历提醒网站怎么优化推广
  • 贵阳制作网站的公司长春网站建设方案推广
  • 如何网站做淘客seo的全称是什么
  • 郴州网络天津百度快照优化公司
  • 个人备案的网站内容搜索风云榜百度
  • 专业的做网站公司网址大全下载到桌面
  • 百度响应式网站怎么做网络舆情管控
  • 网站开发制作合同范本上海百度seo网站优化
  • 企业qq邮箱登录入口seo去哪里培训
  • 吴江建网站优荐苏州聚尚网络北京软件培训机构前十名
  • 迷你主机做网站服务器企业网站推广渠道