自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 数组中未出现的最小正整数

【题目】给定一个无序整型数组arr,找到数组中未出现的最小正整数。 【举例】arr=[-1,2,3,4]。返回1。arr=[1,2,3,4]。返回5#includeusing namespace std;int missNum(int *arr,int length);int main(){int arr[4]={1,2,4,5};c

2015-09-07 21:53:02 1059

原创 链表倒序

Node *Reverse(Node *head){ Node *p1,*p2,*p3; if(head==NULL||head->NULL) return head; p1=head; p2=p1->next; while(p2) { p3=p2->next; p2->next=p1; p1=p2; p2=p3; } head->next=NULL; he

2015-06-24 20:46:12 409

原创 约瑟夫问题

已知 n 个人(以编号1, 2, 3 ,4, 5 ,6  ... .. .n)围坐一张圆桌周围。从编号为k 的人开始报数,数到m 的那个人出列;他的下一个人又从 1开始报数,数到m的那个人又出列;依次规律重复下去,直到圆桌周围的人全部出列。请用C++编程。整个程序分为3个步骤:第一步:建立一个有n个元素的循环链表,链表是从1的编号开始的。第二步:是从链表的表头数到第 k -

2015-06-24 20:21:03 350

转载 STL之deque容器详解

Deque 容器deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容。deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是,deque还支持从开始端插入数据:push_front()。使用deque容器之前必须加上头文件:#include; 

2015-06-16 21:45:02 368

转载 STL之list容器详解

List 容器list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。使用list容器之前必须加上头文件:#include;list属于std命名域的内容,因此需要通过命名限定:using std::list;也可以直接使用全局的命名空间方式:using name

2015-06-16 21:38:13 411

转载 STL之vector容器详解

vector 容器vector是C++标准模版库(STL,Standard Template Library)中的部分内容。之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说:vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。使用vector容器之前必须加上头文件:#include;vector属于std命名域的内容,因此需要通过命名限

2015-06-16 21:36:33 447

转载 c++空类实例大小不是0原因

初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却 大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的一点经验,是编译器这方面的一个具体功能.首先:我们要知道什么是类的实例化,所谓类的实例化就是在内

2015-06-15 11:10:29 318

原创 stm32 swd下载设置

找到红色部分option点击进入设置,选择device,选择单片机的型号,在debug中选择,点击settings,选择port为sw,max clock设置, 速度你可以按照你的实际需求来设置, 如果你的板子供电系统不是特别稳定, 纹波比较大或者仿真线比较长可以设置成 500K 或者 1M,如果环境很好当然可以选择 10M , 当然速度

2015-06-08 15:11:42 1319

原创 函数查找一个整数数组中第二大的数

#include using namespace std;const int MINNUMBER = -32767;int find_set_max(int data[], int count){    int maxnumber = data[0];    int sec_max = MINNUMBER;    for (int i = 1; i     { 

2015-05-28 14:30:57 547

原创 sizeof 数据对齐问题

总结:(1)当最高位为char型数据时,组合成char型数据,此时sizeof为1的整数倍。(2)当最高位为short型数据时,组合成short型数据,此时sizeof为2的整数倍。(3)当出现数据位最高为整型数据,也即32位数据,可以把其中的不够32位的同一种数据组合起来成32位,不同数据不能组合在一起,sizeof为4的整数倍(4)当出现数据位最高为double数据,也即64位数据,可以把其中的不够32位的同一种数据组合起来成32位,同时可以把不同种数据组合成64位,ziseof为8的整数倍(5

2015-05-28 10:43:44 441

转载 函数参数的传递问题(指针的指针)

函数参数的传递问题(指针的指针) 程序1:void myMalloc(char *s) //我想在函数中分配内存,再返回{  s=(char *) malloc(100);}void main(){  char *p=NULL;  myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么?  if(p) free(p);

2015-05-27 10:02:48 426

原创 函数指针与函数指针数组的定义与使用

函数指针与函数指针数组的定义与使用函数指针:指向函数的指针定义方法为double add(double a,double b);double sub(double a,double b);double mul(double a,double b);double div1(double a,double b);double (*Func)(double,d

2015-05-27 09:43:22 368

原创 关键字volatile有什么含义?并给出三个不同的例子

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份.下面是volatile变量的几个例子:  1).并行设备的硬件寄存器(如:状态寄存器)  2).一个中断服务子程序中会访问到的非自动变量(Non-automatic variabl

2015-05-27 09:28:47 1022

原创 c语言中const关键字详解

1、什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:) 2、为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。 3、cons有什么主要的作用? (1)可以定义const常量,具有不可变性。 例如: const int M

2015-05-26 19:27:21 392

原创 字符数组与字符指针

1.字符指针可以指向一个字符串。我们可以用字符串常量对字符指针进行初始化。例如,有说明语句:char *str = "This is a string.";//字符串在常量区是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。这里要注意字符指针与字符数组之间的区别。例如,有说明语句:char string[ ]="This is a st

2015-05-26 14:43:43 413

转载 C++预编译

C++提供的编译预处理功能主要有以下三种:  (一) 宏定义  (二) 文件包含  (三) 条件编译预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理

2015-05-26 09:43:13 372

原创 C++中的类模板Template

多个类有着共同操作,但是数据类型不同。如下的3个类,getMax的功能是相同的,即求两个数中的最大值,仅仅是数据类型不同。 Cpp代码  class Compare_int  {      private:          int x,y;      public:          Compare(int a,int b)      

2015-05-25 14:08:33 365

原创 虚表/虚指针

虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:class A{public:virtual void f();virtual void g();private:int a};class B : public 

2015-05-25 09:36:22 341

转载 深入探讨C++中的引用

引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当 然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的 作用。  一、引用简介  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完

2015-05-21 17:11:15 254

转载 关于USART接收中断的BUG和注意事项

今天在使用USART模块,遇到了一些问题并解决了,于是发贴共享。问题描述:在使用USART做串口通讯时,我只把接收中断打开,并设置抢占优先级为最低一个级别,而接收中断上一个优先级处理事情比较多,可能占用了2ms时间。当我使用9600波特率往下位机发送数据,速度非常快,就是一直按回车发!问题就出来,不到1分钟时间,通讯没有反应了。USART配置代码如下:void uart_confi

2015-05-13 15:29:55 1315

原创 STM32通用定时器原理

一 STM32通用定时器原理            通用定时器 是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。                        STM32 系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,

2015-05-12 21:08:23 5119

原创 STM32 IO模式

一、总结在STM32中选用IO模式       1、浮空输入GPIO_IN_FLOATING ——浮空输入,可以做KEY识别,RX1       2、带上拉输入GPIO_IPU——IO内部上拉电阻输入       3、带下拉输入GPIO_IPD—— IO内部下拉电阻输入       4、模拟输入GPIO_AIN ——应用ADC模拟输入,或者低功耗下省电       5、开漏输出

2015-05-12 18:35:37 541

原创 STM32 NVIC 中断优先级管理

CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。但 STM32 并没有使用 CM3 内核的全部东西,而是只用了它的一部分。STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。而我们常用的就是这 68 个可屏蔽中断,但是 STM32 的 68 个可屏蔽中断,在 STM3

2015-05-12 16:11:30 601

原创 栈,堆分区

在C\C++中,通常可以把内存理解为4个分区:栈、堆、全局/静态存储区和常量存储区。下面我们分别简单地介绍一下各自的特点。一.   区域划分堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。栈:是个线程独有的,保存其

2015-05-11 22:16:24 485

原创 C++ STL中迭代器介绍

迭代器迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符

2015-05-11 21:20:25 330

原创 c#线程同步(3)----monitor

首先lock和Minitor有什么区别呢?其实lock在IL代码中会被翻译成Monitor。也就是Monitor.Enter(obj)和Monitor.Exit(obj).lock(obj){}等价为:try{          Monitor.Enter(obj) }catch(){}finally{      Monitor.Exit(obj) }所以lock能

2015-04-27 18:41:48 477

原创 c#线程同步(2)----lock

lock语句根本使用的就是Monitor.Enter和Monitor.Exit,也就是说lock(this)时执行Monitor.Enter(this),大括号结束时执行Monitor.Exit(this).他的意义在于什么呢,对于任何一个对象来说,他在内存中的第一部分放置的是所有方法的地址,第二部分放着一个索引,他指向CLR中的SyncBlock Cache区域中的一个SyncBlock.什

2015-04-27 18:35:45 471

原创 C#线程同步(1)-------轻量级同步Interlock

在c#里面,实现线程同步方法有很多种。我了解到的至少有8种。这里先讲下,一种比较简单的同步方法-------轻量级同步Interlock。        为什么说它是轻量级呢?因为它仅对整形数据(即int类型,long也行)进行同步。如果你学过操作系统里面的PV操作(即信号量),那么你对它已经了解了一般。它实现的正是如同信号量的功能。下面是它提供的方法:例程:       

2015-04-27 18:22:54 1539

原创 C#中ParameterizedThreadStart和ThreadStart区别

函数不需要传递参数,也不需要返回参数  我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下:ThreadStart threadStart=new ThreadStart(Calculate);Thread thread=new Thread(threadStart); thread.Start(); public void Calcul

2015-04-27 17:10:57 2179

转载 C#中Invoke的用法

在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往会想当然地这么写:void ButtonOnClick(object sender,EventArgs e){    button.Text="关闭";}这样的

2015-04-27 16:20:42 24643 2

原创 Application.DoEvents()的作用

记得第一次使用Application.DoEvents()是为了在加载大量数据时能够有一个数据加载的提示,不至于系统出现假死的现象,当时也没有深入的去研究他的原理是怎样的,结果在很多地方都用上了Application.DoEvents(),今天看到了关于这方面的一些文章,知道我以前有些用法是不当的,有些地方需要慎用Application.DoEvents()。首先我们先看看在循环比较大的程序中

2015-04-27 14:16:56 2433

原创 死锁

什么是死锁?如果一个进程集合里面的每个进程都在等待只能由这个集合中的其他一个进程(包括他自身)才能引发的事件,这种情况就是死锁。这个定义可能有点拗口,一个最简单的例子就是有资源A和资源B,都是不可剥夺资源,现在进程C已经申请了资源A,进程D也申请了资源B,进程C接下来的操作需要用到资源B,而进程D恰好也在申请资源A,那么就引发了死锁。这个肯定每个人都看过了。然后套用回去定义:如果一

2015-04-27 12:10:49 377

转载 作业、进程、线程

1. 基本概念作业:用户在一次解决或是一个事务处理过程中要求计算机系统所做的工作的集合,它包括用户程序、所需要的数据集控制命令等。作业是由一系列有序的步骤组成的。作业的完成要经过作业提交、作业收容、作业执行和作业完成4个阶段。在执行一个作业可能会运行多个不同的进程。进程:程序在一个数据集上的一次运行过程。是操作系统资源分配的基本单位。           在Windows下

2015-04-22 20:03:13 492

转载 网络互联参考模型(详解)

网络互联参考模型1. 什么是协议 为了使数据可以在网络上从源传递到目的地,网络上所有设备需要“讲”相同的“语言”描述网络通信中“语言”规范的一组规则就是协议例如:两个人交谈,必须使用相同的语言,如果你说汉语,他说阿拉伯语……数据通信协议的定义决定数据的格式和传输的一组规则或者一组惯例2. 协议分层网络通信的过程很复

2015-04-22 19:35:01 527

转载 八大排序算法之三简单选择排序(c语言)

选择排序—简单选择排序(Simple Selection Sort)基本思想:在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。简单选择排序的示例: 操作方法:第一趟,从n 个记录中找出

2015-04-22 19:18:25 935

转载 大数的乘法(包括浮点数)

一.大数乘法我们知道,要运算两个数的乘法,c、c++语言里有专门的运算符*。但是当两个数超过一定的范围时,用普通的运算符会产生溢出,并不能得到正确的结果。如何进行运算呢?      首先,要想保存一个大数,用正常的整形或浮点类型是不够的。所以我们可以采用字符串的形式对大数进行保存,然后编写算法,模拟乘法运算过程即可。1.第一个问题:两个数字运算结果至多用多少位的字符串保存呢

2015-04-22 19:00:22 920 1

转载 八大排序算法之二希尔排序(C语言)

希尔排序是一种插入排序法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。  基本思想:  不断把待排序的对象分成若干个小组,对同一小组内的对象采用直接插入法排序,当完成了所有对象都分在一个组内的排序后,排序过程结束。每次比较指定间距的两个数据项,若左边的值小于右边的值,则交换它们的位置。间距d按给定公式减少: di+1 =(di +1)/2 ,直到d等于1

2015-04-22 15:57:10 1266

原创 八大排序算法之一直接插入排序(C语言)

概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。        当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。   快速排序:是目前基于比较的内部排序中被认为是最好的方法,

2015-04-22 15:06:04 14773 2

转载 线性表之顺序存储结构--C实现

线性表(list)一、线性表定义线性表是0或多个元素组成的有序序列,若将线性表记为:(a1, ..., ai-1, ai, ai+i, ..., an),则称ai-1是ai的直接前驱元素,ai+1为ai的直接后继元素,当i=1, 2, ..., n-1时,ai有且只有一个直接后继元素,当i=2, 3, ..., n时,ai有且只有一个直接前驱元素。线性表中元素的个数n(n>=0)定义为线性

2015-04-21 22:44:23 464

转载 欧几里德算法

欧几里德算法用于求两个正整数m和n的最大公因子,即能同时整除m和n的最大正整数。欧几里德算法描述如下:以n除m并令r为所得余数,若r = 0,算法结束,n即为答案,否则置m = n,n = r,再让n除m,直到余数为0。c语言实现代码如下:unsigned int gcd(unsigned int m, unsigned int n){        unsigne

2015-04-21 21:56:37 285

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除