自然数映射与下标
程序员文章站
2022-05-13 20:53:21
...
在物理实现上,向量/数组是一段连续的内存空间。但向量/数组不仅仅是连续存储元素的集合,它亦是一个映射(mapping),可从{0,1,…n-1}映射到元素类型均为T的集合上,这种审视和处理的观点显然更高。
例:设学生成绩已存于vector< int>型向量scores中,其值范围从0到100,试统计以10为间隔各分数段学生数目。
解1:最容易想到的是写if/else if或者switch语句来解决问题。假设将各分数段的人数存入向量nums中,程序可写为:
vector<int> Nums(10,0);
for(size_t i=0;i<scores.size();i++)
If(scores[i]<10)
Nums[0]++;
else If(scores[i]<20)
Nums[1]++;
else If(scores[i]<30)
Nums[2]++;
else If(scores[i]<40)
Nums[3]++;
else If(scores[i]<50)
Nums[4]++;
else If(scores[i]<60)
Nums[5]++;
else If(scores[i]<70)
Nums[6]++;
else If(scores[i]<80)
Nums[7]++;
else If(scores[i]<90)
Nums[8]++;
else
Nums[9]++;
显然这是个拙劣的程序思路,如果分数分布均匀的话,scores中平均每个成绩需要做大约5次判断。
解2:
考虑到向量在这里的功效,不妨直接利用下标之间建立映射
vector<int> Nums(11,0);
for(size_t i=0;i<scores.size();i++)
Nums[scores[i]/10]++;
Nums[9] += nums[10];
上一篇: Async 函数处理异步请求
下一篇: springboot异步调用@Async
推荐阅读
-
如何使用Dapper处理多个结果集与多重映射实例教程
-
如何使用Dapper处理多个结果集与多重映射实例教程
-
[视频教程] docker端口映射与目录共享运行PHP
-
详解Docker 端口映射与容器互联
-
MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射
-
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
-
C#_Excel数据读取与写入_自定义解析封装类_支持设置标题行位置&使用excel表达式收集数据&单元格映射&标题映射&模板文件的参数数据替换(第二版-增加深度读取和更新功能)
-
Asp与JS的数组和字符串下标介绍
-
《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
-
DirectX11 With Windows SDK--22 立方体映射:静态天空盒的读取与实现