看着显示屏,学习新知识

这篇具有很好参考价值的文章主要介绍了看着显示屏,学习新知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

看着显示屏,学习新知识

知识先知道

m a p < k e y ( 键 ) , v a l u e ( 值 ) > n a m e ( 名 ) map<key(键), value(值)> name(名) map<key(),value()>name()
u n o r d e r e d _ m a p 如法炮制 unordered\_map如法炮制 unordered_map如法炮制

m a p & u n o r d e r e d _ m a p 的区别 : map \& unordered\_map 的区别: map&unordered_map的区别:

1. 实现 : 1.实现: 1.实现:

  • m a p 是基于平衡二叉搜索树 ( 通常是红黑树 ) 实现的,键是有序的 map是基于平衡二叉搜索树(通常是红黑树)实现的,键是有序的 map是基于平衡二叉搜索树(通常是红黑树)实现的,键是有序的
  • u n o r d e r e d _ m a p 名副其实,它是基于哈希表实现的,键是无序的 unordered\_map名副其实,它是基于哈希表实现的,键是无序的 unordered_map名副其实,它是基于哈希表实现的,键是无序的

2. 性能 : 2.性能: 2.性能:

  • m a p : 插入、删除、查找的平均时间复杂度为 O ( l o g n ) map:插入、删除、查找的平均时间复杂度为O(logn) map:插入、删除、查找的平均时间复杂度为O(logn)
  • u n o r d e r e d _ m a p : 如果哈希函数良好,插入、删除、查找的平均时间复杂度接近 O ( 1 ) ,但最坏情况下可能达到 O ( n ) unordered\_map:如果哈希函数良好,插入、删除、查找的平均时间复杂度接近O(1),但最坏情况下可能达到O(n) unordered_map:如果哈希函数良好,插入、删除、查找的平均时间复杂度接近O(1),但最坏情况下可能达到O(n)

3. 内存 3.内存 3.内存
u n o r d e r e d _ m a p 使用哈希表,当填充因子较低时,需要更多内存 unordered\_map使用哈希表,当填充因子较低时,需要更多内存 unordered_map使用哈希表,当填充因子较低时,需要更多内存

4. 其他: 4.其他: 4.其他:

  • m a p 中的键是有序的,可以很容易的获取键的范围或进行范围查询 map中的键是有序的,可以很容易的获取键的范围或进行范围查询 map中的键是有序的,可以很容易的获取键的范围或进行范围查询
  • u n o r d e r e d _ m a p 虽然键是无序的,但再好的哈希函数与负载因子下,可以提供更快的额查询性能 unordered\_map虽然键是无序的,但再好的哈希函数与负载因子下,可以提供更快的额查询性能 unordered_map虽然键是无序的,但再好的哈希函数与负载因子下,可以提供更快的额查询性能

综上所述,如果需要键的有序特性,用 m a p ;如果需要快速查询且不关心键的顺序,使用 u n o r d e r e d _ m a p 综上所述,如果需要键的有序特性,用map;如果需要快速查询且不关心键的顺序,使用unordered\_map 综上所述,如果需要键的有序特性,用map;如果需要快速查询且不关心键的顺序,使用unordered_map

#include<bits/stdc++.h>
using namespace std;
const unordered_map<char, vector<string>> get_digit_matrix(){//1.定义函数
	//vector:动态数组 
	unordered_map<char, vector<string>> matrix;//2.创建映射
	//3.填充映射
	matrix['0'] = {"XXX", "X.X", "X.X", "X.X", "XXX"};
	matrix['1'] = {"..X", "..X", "..X", "..X", "..X"};
    matrix['2'] = {"XXX", "..X", "XXX", "X..", "XXX"};
    matrix['3'] = {"XXX", "..X", "XXX", "..X", "XXX"};
    matrix['4'] = {"X.X", "X.X", "XXX", "..X", "..X"};
    matrix['5'] = {"XXX", "X..", "XXX", "..X", "XXX"};
    matrix['6'] = {"XXX", "X..", "XXX", "X.X", "XXX"};
    matrix['7'] = {"XXX", "..X", "..X", "..X", "..X"};
    matrix['8'] = {"XXX", "X.X", "XXX", "X.X", "XXX"};
    matrix['9'] = {"XXX", "X.X", "XXX", "..X", "XXX"};
	return matrix;//4.返回映射 
}
int main(){
	std::ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n;
	cin >> n;
	string s;
	cin >> s;
	auto matrix = get_digit_matrix();//auto:自动判断matrix的类型 
	//调用 get_digit_matrix() 函数获取其返回的映射,并将映射存储在变量matrix中 
	for(int i = 0; i < 5; i++){
		for(int j = 0; j < n; j++){
			cout << matrix[s[j]][i];
			if(j != n - 1) cout << ".";
		}
		cout << endl;
	}
	return 0;
}

优化

避免了多次创建映射:每次输出时都会调用 g e t _ d i g i t _ m a t r i x ,从而创建和填充映射,效率十分低效 避免了多次创建映射:每次输出时都会调用get\_digit\_matrix,从而创建和填充映射,效率十分低效 避免了多次创建映射:每次输出时都会调用get_digit_matrix,从而创建和填充映射,效率十分低效

s t a t i c static static
第一次调用 第一次调用 第一次调用get_digit_matrix() 时,该映射会被创建与初始化,所以在后续的调用中,已经存在的映射被返回,从而无需重新创建与初始化 时,该映射会被创建与初始化,所以在后续的调用中,已经存在的映射被返回,从而无需重新创建与初始化 时,该映射会被创建与初始化,所以在后续的调用中,已经存在的映射被返回,从而无需重新创建与初始化

& :返回对静态对象的应用,而不是返回对象的复制品 :返回对静态对象的应用,而不是返回对象的复制品 :返回对静态对象的应用,而不是返回对象的复制品
为什么在 为什么在 为什么在get_digit_matrix() 函数的返回类型前加 函数的返回类型前加 函数的返回类型前加&
每次调用都要从新返回一个新的拷贝,导致性能损失,内存增加 每次调用都要从新返回一个新的拷贝,导致性能损失,内存增加 每次调用都要从新返回一个新的拷贝,导致性能损失,内存增加

#include<bits/stdc++.h>
using namespace std;
const unordered_map<char, vector<string>>& get_digit_matrix(){//1.定义函数 
	//vector:动态数组
    static const unordered_map<char, vector<string>> matrix = {//2.创建映射
    	//3.填充映射
        {'0', {"XXX", "X.X", "X.X", "X.X", "XXX"}},
        {'1', {"..X", "..X", "..X", "..X", "..X"}},
        {'2', {"XXX", "..X", "XXX", "X..", "XXX"}},
        {'3', {"XXX", "..X", "XXX", "..X", "XXX"}},
        {'4', {"X.X", "X.X", "XXX", "..X", "..X"}},
        {'5', {"XXX", "X..", "XXX", "..X", "XXX"}},
        {'6', {"XXX", "X..", "XXX", "X.X", "XXX"}},
        {'7', {"XXX", "..X", "..X", "..X", "..X"}},
        {'8', {"XXX", "X.X", "XXX", "X.X", "XXX"}},
        {'9', {"XXX", "X.X", "XXX", "..X", "XXX"}}
    };
    return matrix;//4.返回映射 
}
int main(){
	std::ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n;
	cin >> n;
	string s;
	cin >> s;
	auto& matrix = get_digit_matrix();//auto:自动判断matrix的类型 
	//调用 get_digit_matrix() 函数获取其返回的映射,并将映射存储在变量matrix中 
	for(int i = 0; i < 5; i++){
		for(int j = 0; j < n; j++){
			cout << matrix.at(s[j])[i];//at:访问键s[j]对应的值 
			if(j != n - 1) cout << ".";
		}
		cout << endl;
	}
	return 0;
}

c o n s t const const
1. 没优化前每次输出都会调用 1.没优化前每次输出都会调用 1.没优化前每次输出都会调用get_digit_matrix() ,每次都要创建与填充映射,创建一个全局的 ,每次都要创建与填充映射,创建一个全局的 ,每次都要创建与填充映射,创建一个全局的const 映射,只创建一次,避免了多次创建映射 映射,只创建一次,避免了多次创建映射 映射,只创建一次,避免了多次创建映射

2. 使用 2.使用 2.使用const 可以防止不小心修改该映射 可以防止不小心修改该映射 可以防止不小心修改该映射文章来源地址https://www.toymoban.com/news/detail-677691.html

#include<bits/stdc++.h>
using namespace std;
const unordered_map<char, vector<string>> get_digit_matrix = {
	//vector:动态数组
    {'0', {"XXX", "X.X", "X.X", "X.X", "XXX"}},
    {'1', {"..X", "..X", "..X", "..X", "..X"}},
    {'2', {"XXX", "..X", "XXX", "X..", "XXX"}},
    {'3', {"XXX", "..X", "XXX", "..X", "XXX"}},
    {'4', {"X.X", "X.X", "XXX", "..X", "..X"}},
    {'5', {"XXX", "X..", "XXX", "..X", "XXX"}},
    {'6', {"XXX", "X..", "XXX", "X.X", "XXX"}},
    {'7', {"XXX", "..X", "..X", "..X", "..X"}},
    {'8', {"XXX", "X.X", "XXX", "X.X", "XXX"}},
    {'9', {"XXX", "X.X", "XXX", "..X", "XXX"}}
};
int main(){
	std::ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n;
	cin >> n;
	string s;
	cin >> s;
	for(int i = 0; i < 5; i++){
		for(int j = 0; j < n; j++){
			cout << get_digit_matrix.at(s[j])[i];//at:访问键s[j]对应的值 
			if(j != n - 1) cout << ".";
		}
		cout << endl;
	}
	return 0;
}

到了这里,关于看着显示屏,学习新知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 F103C8T6学习笔记8:0.96寸单色OLED显示屏显示字符

    使用STM32F103 C8T6 驱动0.96寸单色OLED显示屏: OLED显示屏的驱动,在设计开发中OLED显示屏十分常见,因此今日学习一下。一篇文章从程序到显示都讲通。 文章提供源码、原理解释、测试工程下载,测试效果图展示。   目录 OLED驱动原理—IIC通信: SSD1306 单色 0.96 OLED 显示屏特性

    2024年02月12日
    浏览(55)
  • STM32 F103C8T6学习笔记9:0.96寸单色OLED显示屏—自由取模显示—显示汉字与图片

    今日学习0.96寸单色OLED显示屏的自由取模显示: 宋体汉字比较复杂,常用字符可以直接复制存下来,毕竟只有那么几十个字母字符,但汉字实在太多了,基本不会全部放在单片机里存着,一般用到多少个字就取几个字的模,因此汉字放在这里与自由取模一起讲。 文章提供源码

    2024年02月11日
    浏览(40)
  • 0.96寸 4针 OLED显示屏模块学习笔记(基于89C52单片机)

    一,OLED简介:(学习本模块之前建议先把IIC,SPI通信协议提前了解) OLED,即有机发光二极管( Organic Light Emitting Diode )。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,

    2023年04月08日
    浏览(38)
  • MSP430学习笔记(四)丨I2C通信(MSP430F5529驱动OLED显示屏)

    ​  笔者学习采用单片机型号为MSP430F5529,使用MSP-EXP430F5529LP开发板。 ​  笔者拥有一定的STM32基础,在学习MSP430的过程中,最开始苦于没有合适的OLED显示驱动代码,所以花了很多时间钻研。综合网上的各种代码,笔者认为江协科技的STM32课程中提供的OLED代码使用方便,

    2024年02月16日
    浏览(48)
  • LCD拼接屏、LED显示屏和OLED显示屏的主要区别

    我们在生活或工作中经常看到大大小小的显示屏,但很多人却分不清楚这些屏到底属于哪一类,今天sostron与大家一起来分享下关于:LCD拼接屏、LED显示屏、OLED透明屏三者的区别。 LCD拼接屏、LED显示屏和OLED显示屏是不同类型的显示技术,它们在构成、工作原理和特点上存在明

    2024年02月17日
    浏览(43)
  • FPGA实现LCD显示屏显示彩条

    目录 总体设计  读显示屏ID  读显示屏ID代码 时钟分频  时钟分频代码  LCD显示 lcd显示模块 LCD驱动模块 lcd驱动代码 顶层模块 顶层模块代码 系统总体分为五个模块,分别是:rd_id(读显示屏ID模块),clk_div(时钟分频模块),lcd_display(lcd屏显示模块),lcd_driver(lcd屏驱动模块),和顶

    2024年02月16日
    浏览(36)
  • 矩阵键盘控制LCD1602显示屏显示数字

     主函数部分,其中的LCD1602.h的头文件是在哔哩哔哩江科大自化协的博主的视频资料 总结:     首先是我学习时遇到的问题: 在我一开始运行的时候出现的问题就是,一开始在给主函数的keynumber赋值的时候,等号的左值是叫做Matrixkey的函数,当我按下1按键时显示屏显示01,

    2024年02月11日
    浏览(42)
  • STM32 F103C8T6学习笔记10:OLED显示屏GIF动图取模—简易时钟—动图手表的制作~

    今日尝试做一款有动图的OLED实时时钟,本文需要现学一个OLED的GIF动图取模 其余需要的知识点有不会的可以去我  STM32 F103C8T6学习笔记  系列专栏自己查阅把,闲话不多,直接开肝~~~ 文章提供源码,测试工程下载,测试效果图。 做个简易的时钟,就不把RTC实时时钟放进来学了

    2024年02月12日
    浏览(53)
  • 显示屏分辨率计算

    今天研究了下我的笔记本显示屏的分辨率问题,我的笔记本是 联想 拯救者 Y9000K 2019SE 显示器的尺寸如下所示 17.3英寸的显示屏,那么长和宽分别是(英寸和毫米之间的换算是25.4) 长为 17.3 × 16 9 2 + 1 6 2 = 15.0783 inch = 382.9877 mm 17.3 times frac{16}{sqrt{9^2+16^2}} =15.0783text{inch}=382.9

    2024年02月09日
    浏览(35)
  • LCD1602液晶显示屏

    主函数 LCD1602.c LCD1602.h 接线图:   1、1602屏幕=16x2=32个字符,总共有32个字符  2、每个字符由35个像素组成 每个像素由一小块液晶控制 --------------------------------------------------------------------------------------------------------------------------------- 液晶的控制原理: 不施加电压——液晶完

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包