vector的几种初始化及赋值方式

本文转载自 https://blog.youkuaiyun.com/yjunyu/article/details/77728410?locationNum=10&fps=1

vector的几种初始化及赋值方式:

(1)不带参数的构造函数初始化

//初始化一个size为0的vector
vector<int> abc;

(2)带参数的构造函数初始化

//初始化size,但每个元素值为默认值
vector<int> abc(10);    //初始化了10个默认值为0的元素
//初始化size,并且设置初始值
vector<int> cde(101);    //初始化了10个值为1的元素

(3)通过数组地址初始化

int a[5] = {1,2,3,4,5};
//通过数组a的地址初始化,注意地址是从0到5(左闭右开区间)
vector<int> b(a, a+5);

(4)通过同类型的vector初始化

vector<int> a(5,1);
//通过a初始化
vector<int> b(a);

(5)通过insert初始化

//insert初始化方式将同类型的迭代器对应的始末区间(左闭右开区间)内的值插入到vector中
vector<int> a(6,6);
vecot<int> b;
//将a[0]~a[2]插入到b中,b.size()由0变为3
b.insert(b.begin(), a.begin(), a.begin() + 3);

insert也可通过数组地址区间实现插入

int a[6] = {6,6,6,6,6,6};
vector<int> b;
//将a的所有元素插入到b中
b.insert(b.begin(), a, a+7);

此外,insert还可以插入m个值为n的元素

//在b开始位置处插入6个6
b.insert(b.begin(), 6, 6);

(6)通过copy函数赋值

vector<int> a(5,1);
int a1[5] = {2,2,2,2,2};
vector<int> b(10);

 /*将a中元素全部拷贝到b开始的位置中,注意拷贝的区间为a.begin() ~ a.end()的左闭右开的区间*/
copy(a.begin(), a.end(), b.begin());

//拷贝区间也可以是数组地址构成的区间
copy(a1, a1+5, b.begin() + 5);
要在STM32上使用OLED显示电池电量,你需要先确定电池电量的检测方式。一般来说,有两种检测方式:电压检测和电流检测。电压检测是通过测量电池两端的电压来确定电量,而电流检测是通过测量电池放电的电流来确定电量。 一旦你确定了检测方式,你就可以将检测电路连接到STM32的ADC输入端口上。然后,你需要编写STM32的程序来读取ADC值,并将其转换为电池电量百分比。最后,将电量百分比显示OLED幕上即可。 以下是一个基本的示例代码,假设你使用的是电压检测方式: ```c #include "stm32f10x.h" #include "stm32f10x_adc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "oled.h" #define BATTERY_FULL_VOLTAGE 4.2 // 电池充满时的电压 #define BATTERY_EMPTY_VOLTAGE 3.0 // 电池放空时的电压 void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); } void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); ADC_Cmd(ADC1, ENABLE); } float getBatteryVoltage(void) { float voltage; uint16_t adc_value; ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); adc_value = ADC_GetConversionValue(ADC1); voltage = (float)adc_value * 3.3 / 4096; // 假设STM32的VDD为3.3V return voltage; } int main(void) { float battery_voltage, battery_percentage; char battery_str[5]; GPIO_Configuration(); ADC_Configuration(); OLED_Init(); while (1) { battery_voltage = getBatteryVoltage(); battery_percentage = (battery_voltage - BATTERY_EMPTY_VOLTAGE) / (BATTERY_FULL_VOLTAGE - BATTERY_EMPTY_VOLTAGE) * 100; sprintf(battery_str, "%d%%", (int)battery_percentage); OLED_ShowString(0, 0, "Battery:"); OLED_ShowString(0, 2, battery_str); delay_ms(1000); } } ``` 这段代码中,我们使用了STM32的ADC来读取电池电压,并计算出电池电量百分比。最后,我们使用OLED幕来显示电量信息。 注意,这只是一个基本的示例代码,你需要根据你的具体情况进行修改和优化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值