STL算法组成

STL算法主要是由头文件 组成
是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历、复制、修改等
体积很小,只包括几个在序列上面进行简单数学运算的模板函数
定义了一些模板类,用以声明函数对象

1.常用遍历算法

1.1for_each
函数结构
for_each(iterator beg1, iterator end1, -func) 遍历容器

示例代码

void test101()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}for_each(v.begin(), v.end(), print01);cout << endl;for_each(v.begin(), v.end(), print02());
}

1.2.transform
搬运容器到另外一个容器中
函数结构
transform(iterator beg1, iterator end1, iterator beg2, -func)

//仿函数
class Transform
{
public:int operator() (int v1){return v1;}
};void test102()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int>vTarget;vTarget.resize(v.size());   //需要给vTarget扩容,否则会报错transform(v.begin(), v.end(), vTarget.begin(), Transform());for_each(vTarget.begin(), vTarget.end(), print01);cout << endl;
}

2.常用查找算法

算法简介:
find 查找元素
find_if 按条件查找
adjacent_find 查找相邻重复元素
binary_search 二分查找法
count 统计元素个数
count_if 按条件统计元素个数

2.1.find
功能描述:
查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()
函数原型:
find(iterator beg,iterator end, value)
示例代码

void test201()
{vector<Person>v;Person p1("张三", 18);Person p2("张四", 20);Person p3("张五", 19);Person p4("张六", 28);Person p5("张七", 48);v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);vector<Person>::iterator it = find(v.begin(), v.end(), p2);if (it == v.end()){ cout << "很抱歉没有找到";}else{cout << "恭喜你找到了";}
}

2.2.find_if
函数原型:
find_if(iterator beg, iterator end, _pred)
按值查找,找到返回指定位置迭代器,找不到返回结束迭代器位置
beg 开始迭代器
end 结束迭代器
_Pred 函数或者谓词

//仿函数
class GreateFive
{
public:bool operator()(int val){return val > 5;}
};//2.find_if查找
void test202()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int>::iterator it = find_if(v.begin(), v.end(), GreateFive());if (it == v.end()){cout << "很抱歉没有找到";}else{cout << "恭喜你找到了";}
}

2.3.adjacent_find
查找相邻重复元素
adjacent_find(iterator beg, iterator end);
查找相邻重复元素,返回相邻元素的第一个位置的迭代器
beg 开始迭代器
end 结束迭代器

3.adjacent_find查找
void test203()
{vector<int>v;v.push_back(0);v.push_back(2);v.push_back(0);v.push_back(3);v.push_back(1);v.push_back(3);v.push_back(3);vector<int>::iterator pos = adjacent_find(v.begin(), v.end());if (pos != v.end()){cout << "找到相邻重复元素为:" << *pos << endl;}
}

2.4.binary_search
查找指定元素是否存在
bool binary_search(iterator beg, iterator end, value);
查找指定得元素,查到返回true,否则false
注意:无序序列中不可用

void test204()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}//查找容器中是否有 9 元素bool ret = binary_search(v.begin(), v.end(), 9);if (ret){cout << "找到了元素" << endl;}else{cout << "未找到" << endl;}
}

2.5.count
统计元素个数
count(iterator beg, ierator end, value);
beg 开始迭代器
end 结束迭代器
value 统计的元素

void test205()
{//1.统计内置数据类型vector<int>v;v.push_back(0);v.push_back(2);v.push_back(0);v.push_back(3);v.push_back(1);v.push_back(3);v.push_back(3);int sum = count(v.begin(), v.end(), 3);cout << "统计的元素个数为:" << sum << endl;//2.统计自定义数据类型vector<Person>v2;Person p1("张三", 25);Person p2("张三", 25);Person p3("张三", 25);Person p4("李四", 35);Person p5("张三", 22);Person p6("李斯特", 25);v2.push_back(p1);v2.push_back(p2);v2.push_back(p3);v2.push_back(p4);v2.push_back(p5);v2.push_back(p6);int sum2 = count(v2.begin(), v2.end(), p1);cout << "统计的元素个数为:" << sum2 << endl;}

2.6.count_if
按条件统计元素个数
count_if(ierator beg, ierator end, _Pred);
beg 开始迭代器
end 结束迭代器
-Pred谓词

void test206()
{//1.统计内置数据类型vector<int>v;v.push_back(0);v.push_back(2);v.push_back(5);v.push_back(6);v.push_back(7);v.push_back(6);int sum = count_if(v.begin(), v.end(), GreateFive());cout << "大于5的元素个数为:" << sum << endl;
}

3.常用排序算法

算法简介
sort 对容器内元素进行排序
random_shuffle 指定范围内的元素随机调整次序
nerge 容器元素合并,并存储到另一容器中
reverse 反转指定范围的元素

3.1.sort
按照值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
sort(ierator beg, iterator end, _Pred)
beg 开始迭代器
end 结束迭代器
-Pred谓词

void test301()
{vector<int>v;v.push_back(10);v.push_back(0);v.push_back(30);v.push_back(20);printVector(v);sort(v.begin(), v.end());cout << "--------------------排序后------------------" << endl;printVector(v);sort(v.begin(), v.end(), greater<int>());cout << "--------------------降序后------------------" << endl;printVector(v);
}

3.2.random_shuffle
洗牌 指定范围内的元素随机调整次序
random_shuffle(iterator beg, iterator end)
beg 开始迭代器
end 结束迭代器

void test302()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}//打乱顺序random_shuffle(v.begin(), v.end());printVector(v);
}

3.3.merge
将两个容器元素合并,并存储到另一容器中
注意:两个容器必须是有序的
merge(ierator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)
beg1 容器1开始迭代器
end1 容器1结束迭代器
beg2 容器2开始迭代器
end2 容器2结束迭代器
dest 目标容器开始迭代器

void test303()
{vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);v2.push_back(i+10);}vector<int>v3;v3.resize(v1.size() + v2.size());merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());cout << "插入成功,大小为:" << v3.size() << endl;printVector(v3);
}

4.reverse
将容器内元素进行反转
reverse(iterator beg, iterator end)
beg 开始迭代器
end 结束迭代器

void printv(int v)
{cout << v << " ";
}
//4.常用排序算法 reverse
void test304()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}for_each(v1.begin(), v1.end(), printv);reverse(v1.begin(), v1.end());for_each(v1.begin(), v1.end(), printv);
}

C++练习笔记STL模板库之常用算法1相关推荐

  1. c++ 的 stl模板库_C ++中的标准模板库(STL)

    c++ 的 stl模板库 Standard Template Library (STL) is a collection of standard C++ template classes. It co ...

  2. C++ STL模板库用法查询及一些常见面试题(自用)

    C++STL模板库 文章目录 C++STL模板库 用法查询 Array 1.使用 2.创建 3.成员函数 Vector 1.使用 2. 创建 3.成员函数 deque 1.使用 2. 创建 3.成员函 ...

  3. 运算符重载、STL模板库、类型转换、异常处理机制(C++五)

    目录 一.运算符重载 1. 引入运算符重载 2.语法格式 3.运算符重载有两种表现形式 4.运算符重载分类 5.运算符重载的特点: 二.C++中的STL模板库的使用 1.容器类(container) ...

  4. 【Vue】Vue学习笔记——UI组件库和常用插件

    文章目录 6. UI组件库和常用插件 6.1 Element-ui 6.2 Vue-router 6.2.1 基本用法 6.2.2 跳转 6.2.3 路由嵌套 6.2.4 路由参数传递 6.3 Axi ...

  5. 【STL模板库_(个人总结)】

    1.什么是STL? 2.解释一下什么是trivial destructor 3.使用智能指针管理内存资源,RAII是怎么回事? 4.迭代器:++it.it++哪个好,为什么 5.说一下C++左值引用和 ...

  6. C++拾取——使用stl标准库实现排序算法及评测

    今天看了一篇文章,讲各种语言的优势和劣势.其中一个观点:haskell非常适合写算法,因为使用者不用去关心具体的计算机实现,而只要关注于操作语义.这让它在专心研究算法的人中非常受欢迎.所以很多时候,语 ...

  7. Java学习笔记Day06 工具类及常用算法

    第六章 工具类及常用算法 文章目录 第六章 工具类及常用算法 Java语言基础类 Java基础类库 Object类 概述 toString方法 方法摘要 覆盖重写 equals方法 方法摘要 默认地址 ...

  8. C++STL模板库适配器之stack容器

    目录 适配器 一丶适配器简介 二丶栈(stack)用法 1.栈的常用方法 适配器 一丶适配器简介 Stl中的适配器,有栈 (stack) 队列 queue 根priority_queue 适配器都是包 ...

  9. C++标准库学习笔记——标准模板库笔记

    目录 1. STL组件 2. 容器 2.1 容器分类 2.2 三种容器实现原理 2.3 关联式和无序容器的小知识点 2.4 容器适配器 3. 迭代器 3.1 迭代器概念与基本操作 3.2 迭代器的半开 ...

最新文章

  1. 技术无“学历” 从大专学校走出来的少年AI狂人
  2. 什么是互联网保险平台?
  3. android迷宫源代码,迷宫 c++源代码(Maze c++ source code).doc
  4. 手撕源码之SpringApplication.java【Spring Boot 2.4.4】
  5. 简单web服务器的实现(C++)
  6. Mysql8.0以上重置初始密码的方法
  7. win10 软路由_N合1服务器!NAS、软路由、高清盒子、Web一个都不能少!
  8. 小米Civi的女性突围战
  9. 台式计算机安装无线网卡驱动程序,台式机无线网卡驱动,小编教你台式机无线网卡驱动如何安装...
  10. 【空气质量数据分析专题三】优良率年际变化分析
  11. 031:verbatim 标签
  12. 【洛谷 P5149】 会议座位【归并排序】
  13. 电路b-3—06刘晏辰
  14. 嵌入式学习ARM篇------系统移植1
  15. Kingston DataTraveler G3 4G 量产成功
  16. 深入浅出JavaScript-老杜JavaScript基础教程全套完整版+老杨JS应用篇
  17. kubeasz 安装K8S 错误解决
  18. hive与pig比较
  19. 硅谷一流成功人士是如何分配时间的?
  20. 解决网易云上传歌曲版本替换问题

热门文章

  1. linux系统软件修复,SystemRescueCd(Linux系统修复盘) V5.3.1 官方版
  2. Flash助手弹窗怎么禁止?
  3. [Deeplearning4j应用教程00]_DL4J技术介绍
  4. 最短路问题——Java语言实现
  5. 安装ubuntu QT
  6. 【设计模式】 原型模式
  7. 瑞工热敏票据打印机不自动裁切的设置
  8. 张飞硬件第四部--空气进化通风系统总结
  9. 三步走做好艾默生质量流量计使用工作
  10. 十三、传智书城项目设计