20240508,SET 容器,MAP容器

 过分了家人们,是我列表里的谁,悄咪咪转行不说话,专业好友不到50,这是转了一半啊

SET / MUTISET容器

所有元素会在插入时被自动排序
属于关联式容器,底层结构式用二叉树实现 

set  和  multiset 的区别
SET不允许容器中有重复的元素,MULTISET容许

2.1 构造和赋值

set<T> st;
set(const set &st)
set& operator=(const set &st)

#include<iostream>
using namespace std;
#include<set>
/*
set<T> st;
set(const set &st)
set& operator=(const set &st)
*/
void prints(set<int>& s) {for (set<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
void prints(multiset<int>& s) {for (multiset<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
void t01() {set<int>s1;s1.insert(89);//插入数据唯一方式s1.insert(89);s1.insert(9090);s1.insert(45);s1.insert(12);s1.insert(3);prints(s1);set<int>s2(s1);prints(s2);set<int>s3;s3 = s2;prints(s3);
}
void t02() {multiset<int>s1;s1.insert(89);//插入数据唯一方式s1.insert(89);s1.insert(9090);s1.insert(45);s1.insert(12);s1.insert(3);prints(s1);multiset<int>s2(s1);prints(s2);multiset<int>s3;s3 = s2;prints(s3);
}
int main() {t01();t02();system("pause");return 0;
}
2.2 大小和交换

size()          empty()               swap() 
因为SET不允许有重复的值,所以不能重新指定大小

#include<iostream>
using namespace std;
#include<set>
/*
size()
empty()
swap()
*/
void prints(set<int>& s) {for (set<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
void prints(multiset<int>& s) {for (multiset<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
template <class T>
void iskong(T &s) {if (s.empty()) {cout << "  kong  " << endl;}else {cout << "size: " << s.size() << endl;}
}
void t01() {set<int>s1;iskong(s1);s1.insert(89);//插入数据唯一方式s1.insert(89);s1.insert(9090);s1.insert(45);s1.insert(12);s1.insert(3);iskong(s1);prints(s1);set<int>s2;s2.insert(0);iskong(s2);prints(s2);cout << "_______________________" << endl;s1.swap(s2);iskong(s1);prints(s1);iskong(s2);prints(s2);cout << "_______________________" << endl;cout << "_______________________" << endl;
}
void t02() {multiset<int>s1;iskong(s1);s1.insert(89);s1.insert(89);s1.insert(9090);s1.insert(45);s1.insert(12);s1.insert(3);prints(s1);multiset<int>s2;s2.insert(3);//(3,4)不行prints(s2);cout << "_______________________" << endl;s1.swap(s2);iskong(s1);prints(s1);iskong(s2);prints(s2);
}
int main() {t01();t02();system("pause");return 0;
}
2.3 插入和删除

insert()
clear()
erase(pos)
erase(beg,end)
srase(elem) 

#include<iostream>
using namespace std;
#include<set>
/*
insert()
clear()
erase(pos)
erase(beg,end)
srase(elem)
*/
void prints(set<int>& s) {for (set<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
void prints(multiset<int>& s) {for (multiset<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
template <class T>
void iskong(T &s) {if (s.empty()) {cout << "  kong  " << endl;}else {cout << "size: " << s.size() << endl;}
}
void t01() {set<int>s1;iskong(s1);s1.insert(89);//插入数据唯一方式s1.insert(89);s1.insert(9090);s1.insert(45);s1.insert(12);s1.insert(3);prints(s1);set<int>::iterator it = s1.begin();s1.erase(it);prints(s1);//it++;//s1.erase(it);it = s1.begin(); it++; it++; //IT不能连续使用,要重新赋值IT,不懂s1.erase(it);prints(s1);s1.erase(45);prints(s1);s1.clear();iskong(s1);cout << "_______________________" << endl;
}
void t02() {multiset<int>s1;iskong(s1);s1.insert(89);s1.insert(89);s1.insert(9090);s1.insert(45);s1.insert(12);s1.insert(3);prints(s1);s1.erase(89);prints(s1);s1.erase(s1.begin());prints(s1);s1.erase(s1.begin(),s1.end());iskong(s1);
}
int main() {t01();t02();system("pause");return 0;
}
2.4 查找和统计

 find(key)//存在,返回该元素的迭代器,不存在,返回SET.END()
count(key) //统计个数

#include<iostream>
using namespace std;
#include<set>
/*
find(key)//存在,返回该元素的迭代器,不存在,返回SET.END()
count(key) //统计个数
*/
void prints(set<int>& s) {for (set<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
void prints(multiset<int>& s) {for (multiset<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
template <class T>
void iskong(T &s) {if (s.empty()) {cout << "  kong  " << endl;}else {cout << "size: " << s.size() << endl;}
}
void t01() {set<int>s1;iskong(s1);s1.insert(89);//插入数据唯一方式s1.insert(89);s1.insert(9090);s1.insert(45);s1.insert(12);s1.insert(3);prints(s1);set<int>::iterator it ;it = s1.find(66);//查找不存在的数,查找不报错,查找之后打印报错it--;cout << *it << endl;//迭代器指的是间隙!if(it==s1.end()){^^^^^}it = s1.find(3);cout << *it << endl;int num = s1.count(30);cout << " num=" << num << endl;num = s1.count(3);cout << " num=" << num << endl;//对于SET只有0 和 1cout << "_______________________" << endl;
}
void t02() {multiset<int>s1;iskong(s1);s1.insert(89);s1.insert(89);s1.insert(9090);s1.insert(45);s1.insert(12);s1.insert(3);prints(s1);int num = s1.count(89);cout << " num=" << num << endl;
}
int main() {t01();t02();system("pause");return 0;
}
2.5 SET和MULTISET的区别

 SET不允许容器中有重复的元素,MULTISET容许
SET插入数据的同时会返回插入结果,表示插入是否成功,MULTISET不会检测数据,因此可以插入重复数据

#include<iostream>
using namespace std;
#include<set>
/*
find(key)//存在,返回该元素的迭代器,不存在,返回SET.END()
count(key) //统计个数
*/
void prints(set<int>& s) {for (set<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
void prints(multiset<int>& s) {for (multiset<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
template <class T>
void iskong(T &s) {if (s.empty()) {cout << "  kong  " << endl;}else {cout << "size: " << s.size() << endl;}
}
void t01() {set<int>s1;iskong(s1);// store a pair of values 存储一对值pair<set<int>::iterator ,bool>ret= s1.insert(89);if (ret.second) {//第二个数据cout << "cha ru cheng gong" << endl;}else {cout << "damn" << endl;}prints(s1);ret = s1.insert(89);if (ret.second) {//第二个数据cout << "cha ru cheng gong" << endl;}else {cout << "damn" << endl;}prints(s1);cout << "_______________________" << endl;
}
void t02() {multiset<int>s1;iskong(s1);s1.insert(89);//返回一个迭代器iterators1.insert(89);prints(s1);
}
int main() {t01();t02();system("pause");return 0;
}
2.6 PAIR使用-PAIR对组的创建

成对出现的数据,利用对组可以返回两个数据
pair<type ,type> p (value1,value2)
pair<type ,type> p=make_pair (value1,value2)

#include<iostream>
using namespace std;
#include<set>
/*
pair<type ,type> p (value1,value2)
pair<type ,type> p=make_pair (value1,value2)
*/void t01() {pair<string, int>p("哈哈哈", 78);cout << "xingming :" << p.first << "\tage:" << p.second << endl;pair<string, int>p2 = make_pair("hi i经济", 0);cout << "xingming :" << p2.first << "\tage:" << p2.second << endl;cout << "_______________________" << endl;
}
void t02() {}
int main() {t01();t02();system("pause");return 0;
}
2.7 内置类型指定排序规则

SET默认排序小 -> 大,利用仿函数改变排序规则

#include<iostream>
using namespace std;
#include<set>
class mycompare
{
public:bool operator()(int v1,int v2)const {//第一个重载的符号,第二个参数列表return v1 > v2;}
};//什么加了CONST可以被CONST和非CONST对象调用,不加的只能被非CONST对象调用
//加了表示成员函数隐含传入的THIS指针是CONST指针
void prints(set<int>& s) {for (set<int>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
void prints(set<int,mycompare>& s) {for (set<int, mycompare>::iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}
void t01() {set<int>s1;s1.insert(89);s1.insert(9090);s1.insert(45);s1.insert(12);s1.insert(3);prints(s1);//插入数据之前就要限定排序规则set<int,mycompare>s2;s2.insert(89);s2.insert(9090);s2.insert(45);s2.insert(12);s2.insert(3);prints(s2);
}
void t02() {}
int main() {t01();t02();system("pause");return 0;
}
2.8 自定义数据类型指定排序规则

自定义数据类型都会直接指定排序规则

#include<iostream>
#include<string>
using namespace std;
#include<set>class Person {
public:Person(string name, int a) {this->_name = name;this->_age = a;}
public:string _name;int _age;
};
class mycompare
{
public:bool operator()(Person v1, Person v2)const {//第一个重载的符号,第二个参数列表return v1._age > v2._age;}
};
void setpp2(set<Person, mycompare>& l) {srand((unsigned int)time(NULL));string nameseed = "abcde";for (int i = 0; i < 5; i++) {string name = "选手";name += nameseed[i];int age = rand() % 21 + 20;Person p(name, age);l.insert(p);}
}void prints(set<Person,mycompare>& s) {for (set<Person, mycompare>::iterator it = s.begin(); it != s.end(); it++) {cout << it->_name << " " << it->_age << endl;}cout << endl;
}
void t01() {}
void t02() {//插入数据之前就要限定排序规则set<Person, mycompare>s2;setpp2(s2);prints(s2);
}
int main() {t01();t02();system("pause");return 0;
}

MAP容器

MAP中所有元素都是PAIR;PAIR的第一个元素为KEY(键值),起到索引作用,第二个元素为VALUE(实值 )
所有元素都会根据元素的键值自动排序

MAP / MULTIMAP属于关联式容器,底层结构是二叉树实现的
区别:MAP不允许容器中有重复KEY元素,MULTIMAP允许

优点:可以根据KEY值快速找到VALUE值,高效率,高性能

2.1 构造和赋值

map<T1,T2> mp
map(const map &mp)
map& operator=(const map &mp) 

#include<iostream>
#include<string>
using namespace std;
#include<map>
/*
map<T1,T2> mp
map(const map &mp)
map& operator=(const map &mp)
*/void prints(map<int,string>& s) {for (map<int,string>::iterator it = s.begin(); it != s.end(); it++) {cout << " " << (*it).first << " " <<it->second<< endl;}cout << endl;
}
void t01() {}
void t02() {map<int, string>m;m.insert(pair<int, string>(45, "sefw"));prints(m);map<int, string>m1(m);prints(m1);map<int, string>m2;m2 = m;prints(m2);
}
int main() {t01();t02();system("pause");return 0;
}
2.2 大小和交换

size()          empty()               swap()  

#include<iostream>
#include<string>
using namespace std;
#include<map>
/*
size()          empty()               swap() 
*/void prints(map<int,string>& s) {for (map<int,string>::iterator it = s.begin(); it != s.end(); it++) {cout << " " << (*it).first << " " <<it->second<< endl;}
}
void iskong(map<int,string> &z) {if (z.empty()) {cout << " kkong " << endl;}else {cout << " no no no no no/// size:" <<z.size()<< endl;}
}
void t01() {}
void t02() {map<int, string>m;iskong(m);m.insert(pair<int, string>(45, "sefw"));prints(m);iskong(m);map<int, string>m1(m);m1.insert(pair<int, string>(78, "计划科"));prints(m1);iskong(m1);cout << "_______________________" << endl;m1.swap(m);prints(m);iskong(m);prints(m1);iskong(m1);
}
int main() {t01();t02();system("pause");return 0;
}
2.3 插入和删除

insert(elem)             //不建议用中括号,直接可能会创造一半的东西
m1.insert(pair<int, string>(78, "计划科")); 
m1.insert(make_pair(99, "的深刻思考的"));
m.insert(map<int, string>::value_type(45, "sefw")); 
clear()        erase(pos)       erase(beg,end)        srase(key)  

#include<iostream>
#include<string>
using namespace std;
#include<map>
/*
insert(elem)
clear()
erase(pos)返回下一个元素的迭代器
erase(beg,end)返回下一个元素的迭代器
srase(key)  
*/void prints(map<int,string>& s) {for (map<int,string>::iterator it = s.begin(); it != s.end(); it++) {cout << " " << (*it).first << " " <<it->second<< endl;}cout << endl;
}
void iskong(map<int,string> &z) {if (z.empty()) {cout << " kkong " << endl;}else {cout << " no no no no no/// size:" <<z.size()<< endl;}
}
void t01() {}
void t02() {map<int, string>m;iskong(m);m.insert(map<int, string>::value_type(45, "sefw")); //03prints(m);iskong(m);map<int, string>m1(m);m1.insert(pair<int, string>(78, "计划科"));           //01m1.insert(make_pair(99, "的深刻思考的"));              //02prints(m1);iskong(m1);cout << "_______________________" << endl;m1.erase(m1.begin());prints(m1);m1[3]= (89, "sefw");                                //04prints(m1);map<int, string>::iterator it = m1.begin();it++;m1.erase(it);prints(m1);cout << " " << m1[3] << endl;//不建议用第四种创建办法,无中生有!!!prints(m1);   cout << " " << m1[2] << endl;//打印不出来//cout << " " << (*it).first << " " << it->second << endl;/*it--;m1.erase(it);prints(m1);*/m1.erase(m1.begin());m1.erase(3);prints(m1);
}
int main() {t01();t02();system("pause");return 0;
}
2.4 查找和统计

find(key)//存在,返回该元素的迭代器,不存在,返回SET.END()
count(key) //统计个数

#include<iostream>
#include<string>
using namespace std;
#include<map>
/*
find(key)//存在,返回该元素的迭代器,不存在,返回SET.END()
count(key) //统计个数
*/void prints(map<int,string>& s) {for (map<int,string>::iterator it = s.begin(); it != s.end(); it++) {cout << " " << (*it).first << " " <<it->second<< endl;}cout << endl;
}
void t01() {multimap<int, string>m;m.insert(make_pair(3, "dd"));m.insert(make_pair(3, "76343f"));cout << m.count(3) << endl;cout << m.count(8) << endl;
}
void t02() {map<int, string>m;m.insert(make_pair(1,"iuh"));m.insert(make_pair(2, "dd"));m.insert(make_pair(3, "76343f"));m.insert(make_pair(4, "ddddddd"));prints(m);map<int, string>::iterator it = m.find(3);//返回迭代器if (it != m.end()) {cout << "  find  " << endl;cout<< " " << (*it).first << " " << it->second << endl;}else {cout << "no no no " << endl;}cout<< m.count(3)<<endl;cout << m.count(8) << endl;
}
int main() {t01();t02();system("pause");return 0;
}
2.5 排序
默认排序小 -> 大,利用仿函数改变排序规则
#include<iostream>
#include<string>
using namespace std;
#include<map>
class mycompare {
public:bool operator()(int v1, int v2)const {return v1 > v2;}
};
void prints(map<int,string>& s) {for (map<int,string>::iterator it = s.begin(); it != s.end(); it++) {cout << " " << (*it).first << " " <<it->second<< endl;}cout << endl;
}
void prints(map<int, string, mycompare>& s) {for (map<int, string, mycompare>::iterator it = s.begin(); it != s.end(); it++) {cout << " " << (*it).first << " " << it->second << endl;}cout << endl;
}
void t01() {}
void t02() {map<int, string>m;m.insert(make_pair(1,"iuh"));m.insert(make_pair(2, "dd"));m.insert(make_pair(3, "76343f"));m.insert(make_pair(4, "ddddddd"));prints(m);map<int, string,mycompare>m1;m1.insert(make_pair(1, "iuh"));m1.insert(make_pair(2, "dd"));m1.insert(make_pair(3, "76343f"));m1.insert(make_pair(4, "ddddddd"));prints(m1);
}
int main() {t01();t02();system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3022589.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

DDD架构理论详解

文章目录 一、概念入门1. 概念简介2. DDD的核心理念3. 范式4. 模型5. 框架6. 方法论7. 软件设计的主要活动 二、DDD核心理论1. Domain领域层都包含什么&#xff1f;2. 聚合、实体和值对象3. 仓储&#xff0c;封装持久化数据4. 适配&#xff08;端口&#xff09;&#xff0c;调用…

RabbitMQ (windows) 安装

大家好我是苏麟 , 今天安装一下 RabbitMQ . 官网 : RabbitMQ: One broker to queue them all | RabbitMQ 1.点击 Getting Started 2. 点击 Docs 3.点击 Install And Upgrade 4.点击 installation via Chocolatory 5. 直接下载安装包 RabbitMQ 下好了先放在一遍 RabbitMQ 需要 E…

Echarts柱状图横坐标不显示

本人遇到的问题&#xff1a;折线图横坐标可以正常显示 柱状图接收一样的数据在横坐标却显示不了 1.在前端打印是否能够正常接收数据、数据类型是否有误以及数据是否有内容 console.log(typeof optionbar.xAxis.data)console.log(optionbar.xAxis.data) 2.如上确定能够接收到数…

Shuffle Cards (STL rope平衡树库)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例1&#xff1a; 输入 5 1 2 3 输出 2 3 4 1 5 样例2&#xff1a; 输入 5 2 2 3 2 3 输出 3 4 1 2 5 样例3&#xff1a; 输入 5 3 2 3 1 4 2 4输出 3 4 1 5 2 思路&#xff1a; 这道题&…

分类任务的基础学习

1.什么是分类&#xff1f; 2.局限性&#xff1a; 当样本量逐渐变大的时候&#xff0c;准确率会下降——>因为线性回归曲线距离我们的原点越远&#xff0c;预测就会开始不准确&#xff0c;因为 x前面的倍数就会越来越小&#xff0c;这就导致了样本量变大&#xff0c;但是那些…

怎样选择IT外包公司?需要注意什么?

随着网络化、数字化、智能化快速发展&#xff0c;一部分企业成立自己的IT部门&#xff0c;负责各个科室的网络安全&#xff0c;大部分企业把网络安全、数据安全&#xff0c;外包给专业的IT外包公司&#xff0c;既提升了办公效率&#xff0c;企业又能把主要精力放在发展核心业务…

GIS 中的空间模式

空间模式显示了地球上事物的相互联系方式。这些图案可以是天然的或人造的。当我们使用 GIS 时&#xff0c;我们可以看到事物的位置以及它们之间的关系。今天&#xff0c;让我们关注地理和 GIS 领域的空间模式。 点分布的类型 点分布是将特定位置映射为地图上的单个点的方式。这…

ROS 2边学边练(44)-- 从头开始构建一个视觉机器人模型

前言 从此篇开始我们就开始接触URDF(Unified Robot Description Format&#xff0c;统一机器人描述格式)&#xff0c;并利用其语法格式搭建我们自己的机器人模型。 动动手 开始之前我们需要确认是否安装joint_state_publisher功能包&#xff0c;如果有安装过二进制版本的urdf_…

28 JavaScript学习: 代码规范

代码规范通常包括以下几个方面: 变量和函数的命名规则空格&#xff0c;缩进&#xff0c;注释的使用规则。其他常用规范…… 变量名 在编写JavaScript代码时&#xff0c;遵守良好的变量命名规范是非常重要的&#xff0c;这可以增加代码的可读性和可维护性。以下是一些常见的…

如何使用微信群进行营销推广?微信群引流的方法

智能手机在人民的生活中扮演着重要角色。事实上&#xff0c;一些日常生活必需品必须通过这些应用才能完成&#xff01;这一点在微信上尤其明显。微信是中国的超级应用&#xff0c;每天有数百万的人将其用于许多不同的目的。使微信成为超级力量的原因是它是一个包罗万象的应用&a…

【北京迅为】《iTOP-3588开发板快速烧写手册》-第8章 TF启动

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

IO 5.8日

1&#xff1a;使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能&#xff0c;注意&#xff0c;代码中所有函数后面&#xff0c;紧跟perror输出错误信息&#xff0c;要求这些错误信息重定向到错误日志 err.txt 中去 2&#xff1a;判断一个文件是否拥有用户可写…

航空电子FC节点卡, FC交换机,主要采用LC或MPO光纤接口形式

FC节点卡主要采用LC或MPO光纤接口形式&#xff0c;可以作为4/2个独立端口使用&#xff0c;也可以作为2对/1对冗余端口使用&#xff0c;支持1.0625Gbps、2.125Gbps、4.25Gbps、8.5Gbps通信速率。节点卡完全遵循FC-LS&#xff0c;FC-FS&#xff0c;FC-AE-ASM、FC-AE-1553B等FC光纤…

RFC 791 (1)-导论

目录 浅论 IP是啥 IP可以管啥 操作 范例查看 提示&#xff1a;本系列将会开始RFC文档阅读&#xff0c;这里会给出我的一些笔记 浅论 我们这篇RFC文档描述的是IP和ICMP协议&#xff0c;我们都知道&#xff0c;在传统的OSI七层或者是现在被简化的五层&#xff1a;应用层&…

WPF 图片显示某一部分区域

效果图&#xff1a; 代码&#xff1a; <Image Width"32"HorizontalAlignment"Right"Height"32"Source"../../Resources/Images/BLUEWOLF.jpg"><Image.Clip><PathGeometry><PathFigure StartPoint"32,32&quo…

从谚语:“一手交钱,一手交货来”谈谈什么是数据库事务

事务与交易 一手交钱&#xff0c;一手交货 一手交钱&#xff0c;一手交货&#xff0c;谚语&#xff0c;意思是指钱和货当场相交&#xff0c;互不拖欠。出自明朝施耐庵《水浒传》第二一回。 Transaction 意思 我们先来看一下来自于剑桥英-英词典的解释&#xff1a; transac…

【触摸案例-手势解锁案例-连线到按钮 Objective-C语言】

一、接下来,我们接着来说这个,连线的问题啊, 1.连线的问题啊,也就是说,我现在点击一个按钮, 在移动到下一个按钮的时候,在两个按钮中间,在两个按钮都亮起来的时候呢,我们肯定是让它去画一条线的,那么, 1)首先,如果我现在从第一个按钮,连到第二个按钮,那么,这条…

使用macof发起MAC地址泛洪攻击

使用macof发起MAC地址泛洪攻击 MAC地址泛洪攻击原理&#xff1a; MAC地址泛洪攻击是一种针对交换机的攻击方式&#xff0c;目的是监听同一局域网中用户的通信数据。交换机的工作核心&#xff1a;端口- MAC地址映射表。这张表记录了交换机每个端口和与之相连的主机MAC地址之间…

数据可视化训练第一天(matplotlib直线;散点图,随机漫步)

前言 本人自己的练习记录&#xff1b;如有错误请指正&#xff1b; https://matplotlib.org/stable/gallery/lines_bars_and_markers/index.html 官方有许多例子&#xff0c;可以找到自己需要的图像模仿进行绘制 1.一个简单的直线例子 就如同我们学习C语言的第一个helloword时…

RFID射频识别中的高频HF

RFID&#xff0c;即 Radio Frequency Identification 射频识别技术&#xff0c;是一种非接触式的自动识别技术&#xff0c;通过无线射频方式进行非接触双向数据通信&#xff0c; 对电子标签或射频卡进行读写&#xff0c; 从而完成读写器与标签之间的数据通信&#xff0c; 实现识…