set_rang.cpp

本文通过一个C++示例展示了如何使用STL中的set容器进行元素插入、以及如何利用lower_bound、upper_bound和equal_range等成员函数来查找特定范围内的元素。这些函数对于高效地管理和检索有序集合非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #ifdef __BCPLUSPLUS__
#include <set.h>
#else
#include <set>
#endif

#include <iostream.h>

using namespace std;
typedef set<int, less<int>> SET_INT;

void main(void)
 {
   SET_INT s1;
   SET_INT::iterator i;

   s1.insert(5);
   s1.insert(10);
   s1.insert(15);
   s1.insert(20);
   s1.insert(25);
   cout << "s1 -- starting at s1.lower_bound(12)" << endl;

// prints: 15,20,25
   for (i = s1.lower_bound(12); i != s1.end(); i++)
      cout << "s1 has " << *i << " in its set." << endl;
   cout << "s1 -- starting at s1.lower_bound(15)" << endl;

// prints: 15,20,25
   for (i = s1.lower_bound(15);i != s1.end(); i++)
      cout << "s1 has " << *i << " in its set." << endl;
   cout << "s1 -- starting at s1.upper_bound(12)" << endl;

// prints: 15,20,25
   for (i = s1.upper_bound(12); i != s1.end(); i++)
      cout << "s1 has " << *i << " in its set." << endl;
   cout << "s1 -- starting at s1.upper_bound(15)" << endl;

// prints: 20,25
   for (i = s1.upper_bound(15); i != s1.end(); i++)
     cout << "s1 has " << *i << " in its set." << endl;
   cout << "s1 -- s1.equal_range(12)" << endl;

// does not print anything
   for (i = s1.equal_range(12).first;i != s1.equal_range(12).second; i++)
      cout << "s1 has " << *i << " in its set." << endl;
   cout << "s1 -- s1.equal_range(15)" << endl;

// prints: 15
   for (i = s1.equal_range(15).first;i != s1.equal_range(15).second; i++)
      cout << "s1 has " << *i << " in its set." << endl;
 }

这是一个按键的代码 void ALM_Key_Pro(PRESS_MODE_TypeDef Press_Mode) { if(SysData.Cal_Mode) { if(SysData.Freq_Weight == C_WEIGHT) { SysData.Freq_Weight = A_WEIGHT; FREQ_WEIGHT_A; Disp_All(); Delayms(2000); } else { SysFlag.Cal_En = 1; Cal_Pro(); } return; } switch(SysData.Sys_State) { case MAIN_STATE: switch(Press_Mode) { case SHORT_PRESS: if(Press_Mode != SHORT_PRESS)break; //报警开关 if(SysData.ALM_EN == ENABLE) { Close_Alm(); SysData.ALM_EN = DISABLE; LED_2_OFF; //yanggj } else { SysData.ALM_EN = ENABLE; } SysInfo.AlmPara.Struct_Para.Alm_Switch = SysData.ALM_EN; Save_Param(&SysInfo.AlmPara, sizeof(SysInfo.AlmPara)); break; case LONG_PRESS: Close_Alm(); SysData.WaitReleaseKey = 0; SysData.Save_Cnt = 0; SysData.Sys_State = SET_STATE; SysData.Set_State = SET_ALM; SysData.SET_Value = SysData.Alm / 10; SysFlag.DispSetEn = 1; Time_Set.year = Time_Dec.year; Time_Set.month = Time_Dec.month; Time_Set.day = Time_Dec.day; Time_Set.hour = Time_Dec.hour; Time_Set.minute = Time_Dec.minute; Time_Set.second = Time_Dec.second; break; } break; case SET_STATE://设置状态 switch(SysData.Set_State) { case SET_ALM: SysData.Alm = SysData.SET_Value * 10; SysInfo.AlmPara.Struct_Para.Alm_Value = SysData.Alm; SysData.SET_Value = SysInfo.AlmPara.Struct_Para.Alm_Time; SysData.Set_State = SET_ALM_TIME; LED_2_OFF; Save_Param(&SysInfo.AlmPara, sizeof(SysInfo.AlmPara)); break; case SET_ALM_TIME: SysData.Alm_Time = SysData.SET_Value; SysInfo.AlmPara.Struct_Para.Alm_Time = SysData.Alm_Time; SysData.Set_State = SET_ALM_Type; SysData.SET_Value = SysInfo.AlmPara.Struct_Para.Alm_Type; Save_Param(&SysInfo.AlmPara, sizeof(SysInfo.AlmPara)); break; case SET_ALM_Type: SysData.Alm_Type = SysData.SET_Value; SysInfo.AlmPara.Struct_Para.Alm_Type = SysData.Alm_Type; switch(SysData.Alm_Type) { case 1: Set_Buzz_Pluse(BUZZ_0_LEVEL); break; case 2: Set_Buzz_Pluse(BUZZ_1_LEVEL); break; case 3: Set_Buzz_Pluse(BUZZ_2_LEVEL); break; } SysData.Set_State = SET_YEAR; SysData.SET_Value = Time_Set.year; Save_Param(&SysInfo.AlmPara, sizeof(SysInfo.AlmPara)); break; case SET_YEAR: Time_Set.year = SysData.SET_Value; Time_Hex.year = ((Time_Set.year / 10) << 4) | (Time_Set.year % 10); Save_TimeDate(); SysData.SET_Value = Time_Set.month; SysData.Set_State = SET_MONTH; break; case SET_MONTH: Time_Set.month = SysData.SET_Value; Time_Hex.month = ((Time_Set.month / 10) << 4) | (Time_Set.month % 10); Save_TimeDate(); SysData.SET_Value = Time_Set.day; SysData.Set_State = SET_DAY; break; case SET_DAY: Time_Set.day = SysData.SET_Value; Time_Hex.day = ((Time_Set.day / 10) << 4) | (Time_Set.day % 10); Save_TimeDate(); SysData.SET_Value = Time_Set.hour; SysData.Set_State = SET_HOUR; break; case SET_HOUR: Time_Set.hour = SysData.SET_Value; Time_Hex.hour = ((Time_Set.hour / 10) << 4) | (Time_Set.hour % 10); Save_TimeDate(); SysData.SET_Value = Time_Set.minute; SysData.Set_State = SET_MINUTE; break; case SET_MINUTE: Time_Set.minute = SysData.SET_Value; Time_Hex.minute = ((Time_Set.minute / 10) << 4) | (Time_Set.minute % 10); Save_TimeDate(); SysData.SET_Value = Time_Set.second; SysData.Set_State = SET_SECOND; break; case SET_SECOND: Time_Set.second = SysData.SET_Value; Time_Hex.second = ((Time_Set.second / 10) << 4) | (Time_Set.second % 10); Save_TimeDate(); //保存时间日期 if(SysData.ALM_EN == ENABLE) //yanggj { LED_2_ON; } else { LED_2_OFF; } Close_Alm(); SysData.Save_Cnt = 0; SysData.Sys_State = MAIN_STATE; SysData.Set_State = SET_ALM; SysData.WaitReleaseKey = 0; break; case SET_ALM_CLOCK_HOUR: SysData.Set_State = SET_ALM_CLOCK_MINUTE; SysData.SET_Value = SysInfo.AlarmClockInfo.minute; break; case SET_ALM_CLOCK_MINUTE: SysData.Set_State = SET_ALM_CLOCK_EN; //SysData.SET_Value = SysInfo.AlarmClockInfo.enabled; break; case SET_ALM_CLOCK_EN: //SysInfo.AlarmClockInfo.enabled = SysData.SET_Value; SysData.Set_State = SET_ALM; SysData.Sys_State = MAIN_STATE; Para_Save(); break; } break; } } void Disp_Set(void) { u32 Tmp; if((SysData.Sys_State != SET_STATE) || ((SysData.Sys_State == SET_STATE) && (SysData.Set_State > SET_SECOND))) return; if((SysFlag.FlickEn) && (SysFlag.LCDFlick == 0) && ((SysData.Set_State == SET_ALM_TIME) || (SysData.Set_State == SET_ALM_Type) || (SysData.Set_State == SET_ALM))) { Disp_Clear(); return; } SysFlag.DispSetEn = 0; Tmp = SysData.SET_Value; HexToBcd(Tmp); Fill_Data(); if(MainData[0] == 0) { MainData[0] = 10;//空 if((SysData.Set_State == SET_ALM_TIME) || (SysData.Set_State == SET_ALM_Type) || (SysData.Set_State == SET_ALM)) { if(MainData[1] == 0) MainData[1] = 10; } if(SysFlag.LCDFlick) { switch(SysData.Set_State) { case SET_YEAR: MainData[0] = 18;//年 break; case SET_MONTH: MainData[0] = 19;//月 break; case SET_DAY: MainData[0] = 20;//日 break; case SET_HOUR: MainData[0] = 21;//时 break; case SET_MINUTE: MainData[0] = 22;//分 break; case SET_SECOND: MainData[0] = 23;//秒 break; } } } // MainData[2]=Font_TAB_10_8_6[MainData[0]]; // MainData[1]=Font_TAB_11_9_7[MainData[1]]; // MainData[0]=Font_TAB_10_8_6[MainData[2]]; Disp_LCD(); } 这个是对应的显示的代码 #ifndef __TYPE_H #define __TYPE_H #include "main.h" typedef enum { RANG_70DB = 0x00, RANG_100DB = 0x01, RANG_130DB = 0x02 } MEA_RANGE_TypeDef; //typedef enum //{ // POINT_100DB = 0x00, // POINT_70DB = 0x01, // POINT_40DB = 0x02 //} CAL_POINT_TypeDef; typedef enum { SHORT_PRESS = 0x00, LONG_PRESS = 0x01, } PRESS_MODE_TypeDef; typedef enum { A_WEIGHT = 0x00, C_WEIGHT = 0x01, } FREQ_WEIGHT_TypeDef; typedef enum { FAST_RESP = 0x00, SLOW_RESP = 0x01, } FREQ_RESP_TypeDef; typedef enum { MAIN_STATE = 0x00, SET_STATE = 0x01, } SYS_STATE_TypeDef; typedef enum { SET_ALM = 0x00 , SET_ALM_TIME , SET_ALM_Type , SET_YEAR , SET_MONTH , SET_DAY , SET_HOUR , SET_MINUTE , SET_SECOND , SET_ALM_CLOCK_HOUR , SET_ALM_CLOCK_MINUTE , SET_ALM_CLOCK_EN , } SET_STATE_TypeDef; typedef enum { NO_OUT_RANGE = 0x00, OVER_RANGE = 0x01, UNDER_RANGE = 0x02, } OUT_RANGE_TypeDef; typedef struct { u8 KeyAge : 8; u8 KeyPress : 4; u8 KeyProcessed : 4; GPIO_Module *KeyPort; uint16_t KeyPin; void (*fun) (PRESS_MODE_TypeDef); } SysKey; typedef struct { u8 First_Press; u8 Mea_OK; u8 EEPROM_ERR; u8 SPIFlashErr; u8 Cal_Finish; // u8 Cal_DB_Finish; u8 Cal_En; u8 DispSetEn; u8 LCDFlick; u8 FlickEn; u8 RecFull; u8 Alarms; u8 UpOver; u8 ClockSoundEn; u8 GetRec; u8 BiBiBi; u8 Nop; u8 GetDate; u8 Test; u8 PWD, PWDErr; u8 EraseDoing; u8 UsbCmdLen; u8 SensorType; //温湿度传感器类型 u8 DMA_OK; u8 shutdown; u8 showLcd; } FLAG_TYPE; typedef struct { double ADC_VALUE[3]; double ADC_Sum_Value; u32 ADC_INT_Value; u16 ADC_CNT; u16 DB_Disp; u32 ADC_INT_Value_TAB[8]; u32 CAL_INT_Value; u16 Disp_ALM; //CAL u8 ADC_TAB_CNT; u8 Cal_Mode; //系统状态 // CAL_POINT_TypeDef Cal_DB_Point; FREQ_WEIGHT_TypeDef Freq_Weight; FREQ_RESP_TypeDef Freq_Resp; SYS_STATE_TypeDef Sys_State; OUT_RANGE_TypeDef Mea_Range; MEA_RANGE_TypeDef Adc_Range; SET_STATE_TypeDef Set_State; FunctionalState ALM_EN; u8 SaveCnt_2s; u16 Wait; u8 DispDB_Cnt; u8 CalEn; s16 SET_Value; u16 Save_2s_Data[14]; u32 Start_Rec;//1开始 但是程序中所有的变量 统一从0开始 所以在使用时要-1 u32 End_Rec;//1开始 但是程序中所有的变量 统一从0开始 所以在使用时要-1 u8 Cal_Step; u8 Save_Cnt; u8 FlashNum; u8 WaitReleaseKey; u32 OverCntt[3]; u8 Alm_Time; u8 Alm_Type; u16 Alm; u16 MaxDB_Save; u8 SaveTime2s; u8 DMA_Group; u8 BattCnt; u16 BattBuff[64]; u32 Batt; u8 Units; // 0: 摄氏度, 1: 华氏度 } DATA_TYPE; typedef struct { unsigned char year ; unsigned char month ; unsigned char day ; unsigned char hour ; unsigned char minute ; unsigned char second ; } DATE_TIME; typedef struct { unsigned char hour ; unsigned char minute ; unsigned char second ; unsigned char enabled ; } TIME_INFO; typedef union { u32 Mem; struct { u16 Alm_Value : 16; u8 Alm_Switch : 4; u8 Alm_Type : 4; u8 Alm_Time : 8; } Struct_Para; } UNION_PARA; typedef struct { u16 ID; u16 ChipStart; u32 REC_HalfPages;//从0开始 0至MAX_REC_Pages-1 int16_t Cal_Adc[3]; // int16_t Cal_DB[3]; int32_t Cal_Adc_Squ[3]; UNION_PARA AlmPara; u8 PWRON_Erase; u8 AlarmClockOk;//产生报警 TIME_INFO AlarmClockInfo; } SYS_INFO; //128 typedef struct { u8 Header; u8 Machine_State; u8 Year ; u8 Month ; u8 Day ; u8 Hour ; u8 Minute ; u8 Second ; u16 Result[60]; //Noise_Result: Freq_Weight + Freq_Respon + DB_Value 存储用 } STORAGE; #endif 这个是定义的结构和变量 void UP_Key_Pro(PRESS_MODE_TypeDef Press_Mode) { u16 Tmp; switch(SysData.Sys_State) { case MAIN_STATE: // if(SysData.Cal_Mode) break; // if(Press_Mode!=SHORT_PRESS)break; // // switch(SysData.Freq_Weight) // { // case A_WEIGHT: // SysData.Freq_Weight = C_WEIGHT; // FREQ_WEIGHT_C; // break; // // case C_WEIGHT: // SysData.Freq_Weight = A_WEIGHT; // FREQ_WEIGHT_A; // break; // } // SysData.Save_Cnt=0; // Disp_State(DISP_FREQ_WEIGHT); break; case SET_STATE: if(Press_Mode == LONG_PRESS) { KEy[Num_Up].KeyProcessed = 0; Tmp = KeyOffset; } else { Tmp = 1; } // if(SysFlag.DispSetEn) // { // break; // } SysFlag.FlickEn = 0; SysData.SET_Value += Tmp; SysData.WaitReleaseKey = 0; Check_Set(); Disp_AlarmClockSet(); SysFlag.DispSetEn = 1; break; } } void DOWN_Key_Pro(PRESS_MODE_TypeDef Press_Mode) { u16 Tmp; switch(SysData.Sys_State) { case MAIN_STATE: //主界面温度切换 if(Press_Mode==LONG_PRESS) { SysData.Units = !SysData.Units; Tmp = KeyOffset; } break; case SET_STATE: if(Press_Mode==LONG_PRESS) { KEy[Num_Down].KeyProcessed=0; Tmp = KeyOffset; } else { Tmp=1; } SysFlag.FlickEn=0;//长按不允许闪烁 SysData.SET_Value-=Tmp; SysData.WaitReleaseKey=0; Check_Set(); Disp_AlarmClockSet(); SysFlag.DispSetEn=1; break; } } 这个是上下键的代码 现在的要求是,原来进入到设置页面时,第一个调整的值是噪音的报警值,第二个是报警时长,第三个是报警模式,现在要把第一个调整的值改成温湿度的报警值设置,其它不变,怎么修改
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值