1、容器算法迭代器分离案例

案例:统计某个元素在数组里出现的次数
简易版(帮助理解,无STL)

#include<iostream>
using namespace std; //算法 负责统计某个元素出现多少次
int mycount(int* start,int * end,int val)
{
int num = 0;
while (start != end)
{
if (*start == val)
num++;
start++;
}
return num;
} int main()
{
//数组 容器
int arr[] = { 1,2,4,5,3,8,9,1,4,4 }; int* pBegin = arr;//指针 迭代器
int* pEnd = &arr[(sizeof(arr) / sizeof(arr[0]))]; int num = mycount(pBegin, pEnd, 4);
cout << num << endl; return 0;
}

进阶版(利用STL 算法容器迭代器)
分为text01函数(普通数据),text02函数(类类型数据)两个版本
遍历方法也分别提供两种

#include<iostream>
#include<vector>//动态数组 容器vector
#include<algorithm>//算法
using namespace std; //回调函数
void myprint(int v)
{
cout << v << endl;
} //stl基本语法
void text01()
{
//定义容器
vector<int> v;
v.push_back(10);
v.push_back(34);
v.push_back(40);
v.push_back(40); //通过STL提供的for_each算法
//容器提供迭代器
//vector<int>::iterator迭代器类型
vector<int>::iterator pBegin = v.begin();
vector<int>::iterator pEnd = v.end(); //容器中可能存在基础的数据类型,也可以放自定义的数据类型
//for_each(start,end,回调函数)
//算法
for_each(pBegin, pEnd, myprint);
} class Person
{
public:
int age;
int id;
Person(int age,int id):age(age),id(id)
{ }
}; void text02()
{
//创建容器,类型为person
vector<Person> v;
Person p1(30, 1), p2(23, 2), p3(54, 3), p4(30,4);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4); //自己写算法遍历
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
{
cout << (*it).age << " " << (*it).id << endl;
}
} int main()
{
text01();//基本数据类型
text02();//类
return 0;
}

2、专栏回顾:第一章到第二章2.2

1.迭代器可以理解为指针,对指针的操作基本都可以对迭代器操作。
实际上迭代器是一个类,这个类封装一个指针。

2.容器分为
序列式容器(由进入的时机和地点决定)
关联式容器(容器本身有规则,进入容器要遵守规则)
3.使用迭代器

//vector<int>::iterator迭代器类型
vector<int>::iterator pBegin = v.begin();
//指向第一个元素的迭代器
vector<int>::iterator pEnd = v.end();
//v.end最后元素的下一个位置

4.for_each算法调用迭代器

//回调函数
void myprint(int v)
{
cout << v << endl;
}
//for_each(start,end,回调函数)
for_each(pBegin, pEnd, myprint);

5.深入理解
任务:尝试用容器存放person类型指针,并且打印for_each

不理解C++类对象和类指针的区别的同学可以看一下这篇文章
C++类对象和类指针的区别

这里text02函数作为比较方便理解
text03函数为本题题解

#include<iostream>
#include<vector>//动态数组 容器vector
#include<algorithm>//算法
using namespace std; //回调函数
void myprint(int v)
{
cout << v << endl;
} class Person
{
public:
int age;
int id;
Person(int age, int id) :age(age), id(id)
{ }
}; void text02()
{
//创建容器,类型为person
vector<Person> v;
Person p1(30, 1), p2(23, 2), p3(54, 3), p4(30, 4);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4); //自己写算法遍历
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
{
cout << (*it).age << " " << (*it).id << endl;
}
} void myprint2(Person* v)
{
cout << (*v).id<<" "<<(*v).age<<endl;
} void text03()
{
//创建容器,类型为person*
vector<Person*> v; Person* p1 = new Person(20,3);
Person* p2 = new Person(24, 4);
Person* p3 = new Person(50, 5);
Person* p4 = new Person(70, 6); v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4); //使用迭代器
vector<Person*>::iterator start = v.begin();
vector<Person*>::iterator end = v.end(); //算法
for_each(start, end, myprint2);
}
int main()
{
text02();//类(对比用)
text03();//容器存放person类型指针,并且打印for_each
return 0;
}

谢谢阅读(〃’ ▽ '〃)如有纰漏欢迎指出,觉得还不错就点个赞吧。

1.2 简单的STL案例的更多相关文章

  1. Python3+Dlib实现简单人脸识别案例

    Python3+Dlib实现简单人脸识别案例 写在前边 很早很早之前,当我还是一个傻了吧唧的专科生的时候,我就听说过人脸识别,听说过算法,听说过人工智能,并且也出生牛犊不怕虎般的学习过TensorFl ...

  2. 使用Java实现简单的斗地主案例

    使用Java实现简单的斗地主案例 案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌) ...

  3. JavaScript图片库(简单的应用案例)

    这个图片库小例子的效果如图所示,点击网页上某个图片链接时你将看到两种效果:占位符图片呗替换成这个链接所指向的图片,同时描述性文字也被替换为这个链接的title属性值.     利用一个简单的图片库应用 ...

  4. 如何用DAX实现查看每个月中不同类别排名前一位,以及一个简单的svg案例

    现在给大家带来的是如何用DAX实现查看每个月中不同类别的排名前一位,最终完成效果如下!!! 首先我们需要两张简单的表 基数表 和类别表 当我们创建好表之后,我们再创建一个表格,然后我们将类别表里的列值 ...

  5. Linux SNAT/DNAT简单理解与案例分析。

      在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防 ...

  6. 图像处理 - ImageMagick 简单介绍与案例

    在客户端我们可以用 PhotoShop 等 GUI 工具处理静态图片或者动态 GIF 图片,不过在服务器端对于 WEB 应用程序要处理图片格式转换,缩放裁剪,翻转扭曲,PDF解析等操作, GUI 软件 ...

  7. hdu1237 简单计算器[STL 栈]

    目录 题目地址 题干 代码和解释 参考 题目地址 hdu1237 题干 代码和解释 解本题时使用了STL 栈,要记得使用#include<stack>. 解本题时使用了isdigit()函 ...

  8. javaweb学习总结(二十七)——jsp简单标签开发案例和打包

    一.开发标签库 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java 1 package me.gacl.web.simpletag; 2 3 import java.io.I ...

  9. ChartControl简单的圆柱案例

    由于工作需要,最近学习了DevExpress控件中的ChartControl,并做了简单尝试,通过程序动态添加数据源到chartControl控件中,绘制了如下的条形图. 条形图的颜色等外观可在cha ...

随机推荐

  1. NoSQL 之Redis的5大数据类型

    NoSQL 之Redis的5大数据类型 Redis的五大数据类型也称五大数据对象:了解过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisO ...

  2. 人工智能与智能系统3-> 机器人学3 | 移动机器人平台

    机器人学的基本工具已经了解完毕,现在开始了解移动机器人,这部分包括机器人平台.导航.定位. 所谓机器人平台就是指机器人的物理结构及其驱动方式.本文将学习两种典型移动机器人平台(四旋翼和轮式车)的运动与 ...

  3. python基础语法_8循环语句

    http://www.runoob.com/python3/python3-loop.html while 循环 Python中while语句的一般形式: while 判断条件: 语句 无限循环 我们 ...

  4. E开始使用webdriver

    GETTING STARTED WITH WEBDRIVER Selenium supports automation of all the major browsers in the market ...

  5. mysql悬案 之 为什么用docker启动的mysql配置文件不生效

    文章目录 故事前景 查看docker启动时挂载了哪些目录 使用相同镜像启动一个mysql 新建一个目录用来存放容器内的mysql配置文件 复制容器内的mysql配置文件到本地 查看mysql配置文件目 ...

  6. suse 12 二进制部署 Kubernetets 1.19.7 - 第13章 - 部署metrics-server插件

    文章目录 1.13.0.创建metrics-server证书和私钥 1.13.1.生成metrics-server证书和私钥 1.13.2.开启kube-apiserver聚合配置 1.13.3.分发 ...

  7. Nginx服务器SSL证书安装

    操作场景 本文档指导您如何在 Nginx 服务器中安装 SSL 证书. 说明: 本文档以证书名称 www.domain.com 为例. Nginx 版本以 nginx/1.16.0 为例. 当前服务器 ...

  8. Anchor-free目标检测综述 -- Keypoint-based篇

      早期目标检测研究以anchor-based为主,设定初始anchor,预测anchor的修正值,分为two-stage目标检测与one-stage目标检测,分别以Faster R-CNN和SSD作 ...

  9. jenkins pipeline构建项目

    以前用的jenkins自由风格发布代码.界面丑陋,出现问题位置不够清晰.今天改进一下流程使用jenkins pipeline构建项目. 学习使我快乐 步骤一.安装pipeline插件 点击系统管理-& ...

  10. Devops 开发运维高级篇之微服务代码上传和代码检查

    Devops 开发运维高级篇之微服务代码上传和代码检查 微服务持续集成(1)-项目代码上传到Gitlab 微服务持续集成(2)-从Gitlab拉取项目源码 微服务持续集成(3)-提交到SonarQub ...