- 博客(36)
- 资源 (10)
- 收藏
- 关注
原创 STL vector map遍历失效,顺序容器和关联容器遍历时的erase()注意事项
1 区别关联容器(Associative Container):通过键(key)存储和读取元素的(vector,list,deque,stack,queue,heap,priority_queue,slist.)顺序容器(Sequential Container):通过元素在容器中的位置顺序存储和访问元素。(set,map,multiset,multimap底层机制都是以RB-tree)...
2020-02-11 20:07:29 399
原创 使用c++容器遍历时用erase()删除,出现死循环问题
先说下erase(),这个函数返回值是删除元素的下一个迭代位置,for(vector<int> ::iterator it = data.begin();it != data.end();++it){for(vector<int>::iterator it = data.begin();it != data.end();){ if(..) {...
2019-12-12 10:10:25 798
转载 STL std::sort 源码分析
转载自http://feihu.me/blog/2014/sgi-std-sort/最近在看sort源码,看到这篇博文很好,转发作为记录,转载侵权联系我删除背景在校期间,为了掌握这些排序算法,我们不得不经常手动实现它们,以加深对其的理解。然而这些算法实在是太常用了,我们不太可能在每次需要时都手动来实现,不管是性能还是安全性都得不到保证。因此这些算法被包含进了很多语言的标准库里,在C语言...
2019-12-10 13:55:23 395
原创 static静态变量作用
C语言中的:加在局部变量前面,静态变量,改变了原有变量的生存周期,但不会改变作用域!加在全局变量前面,限制作用域为文件作用域,只能在该文件中使用,不能被其他文件使用。加在函数前面,限制了函数的作用域到文件作用域。c++语言中:保持了C语言原有的特性外,还作用到了成员变量和成员函数上,成为静态成员对于静态成员使用有一定的规则:1 sizeof不能计算静态成员的大小2 ...
2019-03-29 09:53:21 1464
转载 程序员要知道的移位技巧
一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hacker's Delight》,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很多程序都十分精妙,我觉得在一
2017-08-24 10:17:14 720
原创 枚举类的赋值和基本操作
枚举类型的定义枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。定义格式:枚举类型的定义格式为: enum {};其中:关键字enum——指明其后的标识符是一个枚举类型的名字。枚举常量表——由枚举常量构成。“枚举常量”或称“枚举成员”,是以标识符形式表示的整型量,表示枚举类型的取值。枚举常量表列出枚举类型的所有取
2017-08-05 09:04:58 26159
原创 数组指针和指针数组区别图解
最近做了几道题对这个指针数组和数组指针整的比较模糊,然后查询了一些网上资料,整理了一下自己的理解。指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。其实可以通俗的理解,指针型数组《-
2017-08-04 15:30:11 692
原创 操作符优先级全列表,一览表
在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先
2017-08-04 10:49:19 5261
原创 C/C++中,为什么字符串可以赋值给字符指针变量,单引号和双引号的区别
本文是通过几篇转帖的文章整理而成的:http://www.slyar.com/blog/c-quotation-marks.htmlhttp://www.cnblogs.com/KingOfFreedom/archive/2012/12/07/2807223.html1、含义不同。用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中
2017-08-02 10:10:36 4455
原创 分辨出字符串中的重复数字并计算求和
描述:写段代码,定义一个字符串常量,字符串中只有大小写字母和整数,输出字符串中的出现最多的数字的和?例如 ” 9fil3dj11P0jAsf11j ” 中出现最多的是11两次,输出22。代码:int main(){ char str[] = "a2twx34je2"; int len = strlen(str); char buf[100]; int a[100];
2017-07-26 15:03:09 946
转载 0-1背包-动态规划
看了许多的0-1背包我感觉这一个讲的很清楚,推荐下。0-1背包http://blog.csdn.net/laoniu_c/article/details/38453083问题描述:给定n种物品和一背包。物品i的重量是w[i],其价值为v[i],背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?分析:对于一种物品,要么装入背包,要么不装。所以对于一种物品的装
2017-07-24 10:17:38 398
转载 c++中的左值和右值,左值引用和右值引用
转自:http://www.cnblogs.com/catch/p/3500678.html左值(lvalue)和右值(rvalue)是 c/c++ 中一个比较晦涩基础的概念,不少写了很久c/c++的人甚至没有听过这个名字,但这个概念到了 c++11 后却变得十分重要,它们是理解 move/forward 等新语义的基础。左值右值的定义左值与右值这两概念是从 c
2017-07-22 11:01:59 554
原创 <LeetCode>Add Two Numbers
Add Two NumbersYou are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and
2017-07-20 20:32:19 296
原创 字符串加减计算
描述:通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明:1. 操作数为正整数,不需要考虑计算结果溢出的情况。2. 若输入算式格式错误,输出结果为“0”。代码:#include
2017-07-20 16:35:39 12388
原创 字符串压缩
把连续出现的字符压缩成单个字符问题描述:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xx
2017-07-20 15:11:50 392
原创 字符串过滤(删去重复字符)
问题:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。要求实现函数: void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr); 示例 输入:“deefd” 输出:“def
2017-07-20 13:46:08 1167
原创 公有继承和私有继承
确保 public inheritance 模拟 "is-a"使用 C++ 语言进行 object-oriented programming 时唯一最重要规则就是:public inheritance(公开继承)意味着 "is-a"。要让这个规则刻骨铭心。如果你写了一个 class D ("Derived") 从 class B ("Base") 公开继承,你就是在告诉 C++ 编
2017-07-18 14:55:37 713
原创 c++(成员函数的)重载、覆盖与隐藏
覆盖,和隐藏是很不一样的两个概念,要重点区分。重载(overload):同名函数变量,但属于不同的函数类型。发生在同一个作用域内,即在同一个类中。如果跨类,在父类、子类当中存在同名的函数变量(即便是不同的函数类型),如果是 virtual 性质的,就是重载(也叫继承,函数层面的继承),如果是 non-virtual 性质的,(只要子类中有一个同名函数变量没有用 virtual 修饰)就会发
2017-07-18 14:01:56 268
原创 浅析静态绑定和动态绑定
静态绑定 & 动态绑定静态绑定(statically bound),又名前期绑定(early binding);动态绑定(dynamically bound),又名延期绑定(late binding)。ps 英文名称摘自《Effective C++》 条款37。此条款中有关于“静态类型、动态类型”的描述。在 C 语言中并没有“静态绑定”、“动态绑定”的概念(至少我没有查到)
2017-07-18 13:59:34 807
原创 基数排序,桶排序
计数排序和桶排序都只是在研究一个关键字的排序,现在我们来讨论有多个关键字的排序问题。基数排序方法;从最低有效关键字开始排序,称为 LSD(Least Significant Dight)排序 。首先对所有的数据按照次要关键字排序,然后对所有的数据按照首要关键字排序。要注意的是,使用的排序算法必须是稳定的,否则就会取消前一次排序的结果。由于不需要分堆对每堆单独排序。通常,基数
2017-06-23 15:51:46 298
原创 计数排序
非比较排序: ,计数排序,基数排序,桶排序,时间复杂度能够达到O(n). 这些排序为了达到不比较的目的,对数据做了一些基本假设(限制)。如计数排序假设数据都[0,n] 范围内,且范围较小;基数排序假设数据都[0,n] 范围内;也是桶排序假设数据均匀独立的分布。而且,非比较排序的空间要求比较高,用空间换取时间吧。当我们的待排序数组具备一些基数排序与桶排序要求的特性,且空间上又比较富裕
2017-06-23 15:35:30 206
原创 选择排序
时间复杂度O(n^2), 空间复杂度O(1)排序时间与输入无关,最佳情况,最坏情况都是如此, 不稳定。代码:void sort(int arraytoSort){ for(int i = 0; i<arraytoSort.length-1; i++){ int min = i; int temp;
2017-06-23 15:29:24 182
原创 快速排序
比较排序的一种,其实快速排序是基于 “二分” 的思想。快速排序之所比较快,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。快速排序:时间复杂度 O(nlogn) 空间复杂度O(logn) 不稳定 【两个时间复杂度O(nlogn) 的排序算法都不稳定】由于关键字的比较和交换是跳跃进行的,
2017-06-21 20:02:43 219
原创 堆排序
时间复杂度 O(nlogn), 空间复杂度O(1). 从这一点就可以看出,堆排序在时间上类似归并,但是它又是一种原地排序,时间复杂度小于归并的O(n+logn)排序时间与输入无关,最好,最差,平均都是O(nlogn). 不稳定堆排序借助了堆这个数据结构,堆类似二叉树,又具有堆积的性质(子节点的关键值总小于(大于)父节点) 堆排序包括两个主要操作:保持堆的性质heap
2017-06-20 16:05:49 303
原创 冒泡排序
冒泡排序属于比较排序的一种。时间复杂度O(n^2), 空间复杂度O(1), 稳定,因为存在两两比较,不存在跳跃。排序时间与输入无关,最好,最差,平均都是O(n^2)。核心代码:void bubbleSort(int aarraytoSort[]){ for(int i=0;i<arraytoSort.length-1;i++){
2017-06-20 15:54:28 620
原创 归并(合并)排序
归并排序,一种比较排序,通过对数组中的元素进行比较得出排序结果。时间复杂度 O(nlogn),空间复杂度O(n) +O(logn)排序时间与输入无关,最佳情况,最坏情况都是如此, 稳定。原理:可以将数组分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数
2017-06-18 16:58:39 1049 1
原创 插入排序算法
对于插入排序算法来说,它是一种比较排序的一种。以后的博文中我会陆续介绍其余的几种排序算法。时间复杂度O(n^2),空间复杂度O(1)排序时间与输入有关:输入的元素个数;元素已排序的程度。最佳情况,输入数组是已经排好序的数组,运行时间是n的线性函数; 最坏情况,输入数组是逆序,运行时间是n的二次函数。核心代码:void insertionSort(int
2017-06-18 16:35:35 240
原创 单片机外部中断应用
#include "STC/STC15F2K60S2.H"#define uchar unsigned charsbit K=P3^2; sbit BELL=P4^5;sbit Relay=P5^5; //延迟 void delay02s(void) { uchar i,t=200; while(t--)
2014-08-28 14:41:11 699
原创 DS18B20温度传感源代码
#include#include#define uint unsigned int #define uchar unsigned charsbit DQ = P1^4; //ds18b20数据通信口sbit SEGLE = P1^0; //数码管段选锁存控制端口sbit DIGLE = P1^1;
2014-08-28 14:36:07 1293 2
原创 外部EEPROM,IIC总线和EEPROM通信技术
#include "STC/STC15F2K60S2.h" #include //包含NOP空指令函数_nop_(); #define AddWr 0xa0 //写数据地址,需要参考24c02芯片文档 #define AddRd 0xa1 //读数据地址 #define FALSE 0 #define TURE 1 sbit SDA=P2^1;
2014-08-28 14:29:28 1108
原创 单片机,矩阵键盘扫描驱动
void Delay30ms(){ unsigned char i,j; for(i = 0;i for(j = 0;j }/************************************************* *函数名:Keyscan* *函数功能:键盘扫描函数* *全局变量:无
2014-08-28 14:19:35 681
原创 正向,反向,闪烁流水灯
#include "reg52.h" void led_delay(void) { unsigned char i,j; for(i=0;i for(j=0;j ;}void forward(void)//正向流水点亮 { P1=0xfe; //第一个灯亮led_delay(); P3=0xfd;
2014-08-28 14:17:18 5463 2
原创 二次探测再散列散列表 源代码(数据结构)
/**********散列表**********/#ifndef HashTable_#define HashTable_ #include "Except.h" template class E,class K>class HashTable{public:HashTable(int divisor = 11);~HashTable(){delete
2014-08-05 13:45:51 2042
原创 带头节点的双向循环链表(数据结构)(带有遍历)
/*****************带头节点双向循环链表***************/#ifndef Double_#define Double_ #include #include "DoubleNode.h"#include "Excepte.h"#include "DCIterator.h"using namespace std; template
2014-08-05 13:41:31 3405
原创 单片机 电子时钟 (4*4键盘扫描)按键 源代码。
#include "STC/STC15F2K60S2.H"sbit SEGLE=P2^7;sbit DIGLE=P2^6;sbit LEDLE=P2^5;unsigned char code Tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code Tab1[10] = {0x
2014-08-05 13:33:05 3617
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人