- 博客(84)
- 收藏
- 关注
转载 深入理解C++浮点数(float、double)类型数据比较、相等判断
浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。所以浮点数在运算过程中通常伴随着因为无法精确表示而进行的近似或舍入。但是这种设计的好处是可以在固定的长度上存储更大范围的数。1、将字符串转换为float、double
2015-11-08 11:29:16
1583
转载 POD对象
POD类型(Plain Old Data),就是C++里面和C内存结构上完全兼容的结构。 对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列复制到一个字符数组(或者无符号字符数组)中,再将其复制回对象,那么该对象的值与原始值一样。 对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和obj2,如果用memcpy库
2015-11-07 13:23:15
1095
转载 C++中memcpy和memmove的区别总结
这篇文章主要介绍了C++中memcpy和memmove的区别总结,这个问题经常出现在C++的面试题目中,需要的朋友可以参考下 变量的命名我们在写程序时,一般讲究见到变量的命名,就能让别人基本知道该变量的含义。memcpy内存拷贝,没有问题;memmove,内存移动?错,如果这样理解的话,那么这篇文章你就必须要好好看看了,memmove还是内存拷贝。那么既然memcpy和m
2015-11-07 09:52:02
859
原创 声明map对象时你不知道的事
在用map容器写一段程序时,发现个问题请看下面代码map m;m['a'];cout 这输出什么呢?如果用普通数据类型这么做呢?#include#includeusing namespace std;int main(){ int a; cout << a<<endl;//error未引用的局部变量 bool b; cout << (int)b <<
2015-11-06 21:41:43
1364
1
原创 找出一串字符里出现次数最多的字符
题目描述:输入一串字符s,找出出现次数最多的字符,如果有多个字符出现最多,按照原先字符顺序输出。例如:s:12321输出是:12我借用容器map写出的代码,如果此题还有更好的解法,请回复我。#include#includeusing namespace std;int main(){ map m; char s[100]; cin
2015-11-06 21:33:41
1156
原创 压缩矩阵
根据数据结构书本上敲打的,讲述内容较少,但是添加了一些注释。//稀疏矩阵的压缩存储,最多存储10*10的矩阵#include#include//use setwusing namespace std;typedef struct{ int row;//非零元的行下标 int column;//非零元的列下标 int e;//非零元}Triple;typedef str
2015-11-05 21:38:45
947
转载 pair 与 make_pair
// pair简单讲就是将两个数据整合成一个数据// 本质上是有first, second两个成员变量的结构体//make_pair就是构造pair对象的意思#include#include#includevoid test_pair(){ // pair两种构造的方法 // 方法1 std::pair("This is a StringTest0.", 9.7); // 浮点
2015-11-05 00:07:37
817
原创 bind1st 和 bind2nd 解析
头文件: 看这篇文章前,请先看 ptr_fun的使用 和 STL 中 mem_fun 和 mem_fun_ref 的用法 bind1st和bind2nd函数把一个二元函数对象绑定成为一个一元函数对象。 但是由于二元函数对象接受两个参数,在绑定成为一元函数对象时需要将原来两个参数中的一个绑定下来。 也即通过绑定二元函数对象的一个参数使之成为一元函数对象
2015-11-04 09:59:19
808
转载 ptr_fun
头文件:ptr_fun是将一个普通的函数适配成一个仿函数(functor), 添加上argument_type和result type等类型,它的定义如下:[cpp] view plaincopyprint?templateclass _Arg1, class _Arg2, class _Result> inline
2015-11-04 09:52:15
763
转载 nullptr----C++11
原文链接: http://blog.csdn.net/huang_xw/article/details/8764346#comments1. 引入nullptr的原因引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价。NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,
2015-11-04 09:27:37
607
转载 STL 中 mem_fun 和 mem_fun_ref 的用法
怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是用循环来实现。比如有如下的一个类:class ClxECS{public: int DoSomething() { // 这里以输出一句话来代替具体的操作 cout << "Output from method DoSomething!" << endl; return 0; };}; 现在定义如下一个
2015-11-04 00:39:54
620
原创 C++的for语句详解
for(int i=0;i cout这是很简单的语句了来看下一句代码#include int main(){ for (int i; i = 0, ++i < 10;) std::cout << i << std::endl; return 0;}输出什么呢?是的,运行后,无限输出1我们来看一下for ( #1 ; #2 ; #3
2015-11-02 13:04:32
5834
转载 从头到尾彻底理解KMP
从头到尾彻底理解KMP原文链接:http://blog.csdn.net/tukangzheng/article/details/38438481作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。1. 引言 本KMP原文最初写于2年多前的2011年12
2015-11-02 09:32:44
728
转载 OpenGL入门学习
OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。1、与C语言紧密结合。OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。2、强大的可移植性。微软的Direct3D虽然也是十分优秀的图形API,
2015-11-01 14:08:23
863
转载 OpenGL中gl,glu,glut的区别
OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库,gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库,gl中包含了最基本的3D函数,而glu似乎对gl的辅助,如果算数好,不用glu的情况下,也是可以做出同样的效果。glut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我
2015-10-29 18:00:51
818
1
原创 &&和& ;||和|
&&短路与&与(非短路与)||短路或|或(非短路或)关于它们的用法可以百度,这里介绍它们的区别:就拿“与”来说,要求所有的条件都判断;而如果使用短路与,第一个条件为false的话,则后面的条件将不会判断下面看几段代码就全懂了:#includeusing namespace std;int main(){ if (10 != 10 & 10 /
2015-10-25 16:33:31
420
转载 数组指针和指针数组
1、数组指针(指向数组的指针)(1)数组在内存中的表示创建一个数组就是在内存里面开辟一块连续的空间,比如int a[4];就是在内存里面开辟了一个大小为4*sizeof(int)字节的内存空间。二维数组是特殊的一维数组。先来看一段代码:[cpp] view plaincopy"font-size:16px;">void mai
2015-10-24 23:11:43
568
原创 大数相乘
红色笔是代表下标/*大数相乘问题*/#include#includeusing namespace std;void LargeNumbersOperate(string &, string &);int main(){ string str1, str2; while(cin >> str1 >> str2) LargeNumbersOperate(s
2015-10-24 19:50:53
453
原创 C++按位运算符
位运算是指按二进制进行的运算。在程序中,常常需要处理二进制位的问题。C/C++语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。在实际应用中,建议用unsigned整型操作数,因为带符号操作数可能因为不同机器结果不同。C/C++位操作运算符操作符功能用法~位求反~exp
2015-10-24 14:05:20
634
原创 rbegin()和rend()
rbegin()==end()rend()==begin()但是注意rbegin,rend的类型和begin,end不一样前者是反向迭代器(reverse_iterator),后者是迭代器(iterator)对reverse_iterator执行递增将导致它递减来看看实际使用:#include#includeusing namespace std;int main()
2015-10-24 02:24:08
5298
1
原创 C++常见容器概述
以前的11个容器分别是deque,list,queue,priority_queue,stack,vector,map,multimap,set,multiset,bitsetC++11新增:forward_list,unordered_map,unordered_multimap,unordered_set,unordered_multiset
2015-10-24 01:42:48
833
原创 vector的reserve()和resize()
vector 的reserve()增加了vector的capacity,但是它的size没有改变!resize()改变了vector的capacity同时也增加了它的size!reserve(n) 预分配n个元素的存储空间。reserve()可按以下实现:如果n大于容器现有的容量(即capacity()),则需要在自由内存区为整个容器重新分配一块新的更大的连续空间,其大小为n*
2015-10-24 01:05:20
686
原创 const_iterator
const_iterator对象,它可以指向别的元素,但不能修改其指向的元素,可以不初始化#include#includeusing namespace std;int main(){ int a[5] = { 1,2,3,4,5 }; vector v(a,a+5); vector::const_iterator const_it1;//right vector::co
2015-10-23 23:44:38
464
原创 C++标识符override(覆盖),final(禁止),隐藏
1.覆盖(也叫重写)#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 #includeusing namespace std;class Base{public: Base() {} virtual void show(char ch) { cout << "Base"; cout << ch << endl;
2015-10-22 18:58:18
1319
转载 右值引用C++11
C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是
2015-10-22 11:42:12
668
原创 栈-表达式求值
/*栈的顺序存储-表达式求值*///假设输入字符不超过20个,运算数字都是非负的整数,即0,1,2,,,,等等//#include#include//为了使用atoi函数,具体函数用法及作用参见百度或C plus plus 网站using namespace std;/*(1+9)*2/2-1=9(1+9)*2/20-1=01+0=1*/templatestruct S
2015-10-22 09:02:02
739
原创 C#中的隐藏和重写
使用下面的代码可以隐藏 public class BaseClass { public void Show() { Console.WriteLine("BaseClass!"); } } public class DerivedClass:BaseClass { publi
2015-10-20 16:24:58
673
原创 循环单链表实现约瑟夫环问题
问题:编号为1,2,3,,,n的n个人按顺时针围坐一起,每人有一个正整数密码。一开始任选一个整数作为报数上限值m,从第一个人开始按顺时针向自1开始顺序报数,报到m的停止,出列,并把出列的人手中的密码作为新的m值,从接下来的下一个人接着从一开始报数,依次所有人出列利用单向循环链表实现,按照数列的顺序的打印个人的编号例如,m=6;n=7;7个人的密码分别为 3 1 7 2 4 8
2015-10-19 13:40:33
4936
1
转载 define
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。(1) 简单的宏定
2015-10-19 00:11:13
526
转载 C#中的readonly
const 定义的是静态常在对象初始化的时候赋值.以后不能改变它的值.属于编译时常量。不能用new初始化。Readonly 是只读变量.属于运行时变量.可以在类constructor里改变它的值.不能作用于局部变量。const 和 static 不能在一起用,它已经是静态的了。我们都知道,const和static readonly的确非常像:通过类名而不是对象名进行访问,在
2015-10-18 15:25:33
5011
原创 const
#define _CRT_SECURE_NO_DEPRECATE//#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1#include#includeusing namespace std;int main(){ const int a;//error const int b = 1;//right string str1 =
2015-10-18 14:11:37
457
转载 编译,运行
认识C编译执行过程,是C学习的开端。简单说C语言从编码编译到执行要经历一下过程: C源代码编译---->形成目标代码,目标代码是在目标机器上运行的代码。连接---->将目标代码与C函数库相连接,并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码(程序)。执行----->在特定的机器环境下运行C程序。 如果用一个图 来表示: 以上
2015-10-18 12:55:57
524
原创 类中的const成员
#includeusing namespace std;class Base{ const int a;public: Base(int _a):a(_a){} //Base(int _a) { a = _a; } //error };int main(){ return 0;}在类中声明变量为const类型,但是不可以初始化const常量的初始化必须在
2015-10-18 12:11:06
1034
转载 迭代器
1.迭代器(1)迭代器的本质循环结构有两种控制方式:标志控制和计数控制。迭代器可以把这两种标志控制的循环统一为一种控制方法:迭代器控制,每一次迭代操作中对迭代器的修改就等价于修改标志或计数器。在STL中,容器的迭代器被作为容器元素对象或者I/O流中的对象的位置指示器,因此可以把它理解为面向对象的指针——一种泛型指针或通用指针,不依赖于元素的真实类型。迭代器的概念如图所示:set
2015-10-18 07:58:05
746
转载 STL排序详解
详细解说 STL 排序(Sort)0 前言: STL,为什么你必须掌握1 STL提供的Sort 算法1.1 所有sort算法介绍1.2 sort 中的比较函数1.3 sort 的稳定性1.4 全排序1.5 局部排序1.6 nth_element 指定元素排序1.7 partition 和stable_partition2 Sort 和容器3
2015-10-18 07:55:15
755
原创 控制整数以10,16,8进制输出
我们可以分别使用dec,hex,oct控制符来实现。下面的函数调用将cout对象的计数系统格式状态设置为16进制:hex(cout);完成上述设置后,程序将以16进制打印数值,直到将格式设置为其他选项为止。注意,控制符不是成员函数,因此不必通过对象调用。虽然控制符实际上是函数,但它们通常的使用方式为:coutostream类重载了#include using na
2015-10-17 15:03:23
878
转载 内存管理与效率
1.使用reserve()函数提前设定容量大小,避免多次容量扩充操作导致效率低下。 关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长到足以容纳你放进去的数据。(要知道这个最大值,只要调用名叫max_size的成员函数。)对于vector和string,如果需要更多空间,就以类似realloc的思想来增长大小。vector容器支持随机访问,因此为了
2015-10-16 14:01:29
516
原创 线性表--单链表
#define _CRT_SECURE_NO_DEPRECATE//#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1#includeusing namespace std;typedef struct Node{ int data; Node *next;}Node;Node *headPointer;//头指针int
2015-10-15 11:05:03
445
原创 线性表--顺序表
#define _CRT_SECURE_NO_DEPRECATE//#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1#include#includeusing namespace std;#define listInitSize 5#define listIncrement 1typedef struct{ int *el
2015-10-11 14:58:48
395
原创 读入优化与clock()
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下: clock_t clock(void ); 这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在tim
2015-10-11 13:44:17
425
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人