
C++语法细节
文章平均质量分 84
synapse7
这个作者很懒,什么都没留下…
展开
-
hash函数解析
Hash函数在多个领域均有应用,而在数字签名和数据库实现时又用的最多,比如基于hash的索引,是最好的单值查找索引;同时,在当前数据爆炸的场景下,执行相似item的查找时,在内存受限时,均可以采取LSH(local sensitive hash)进行分段处理。具体用途很多,不赘述,下面介绍一些常用的知识:1、hash函数本质;2、简单的hash函数生成法;转载 2013-08-22 20:57:40 · 1077 阅读 · 0 评论 -
用getchar()和putchar()加速IO(含整型快速IO和浮点型快速IO)
****转载请注明http://blog.youkuaiyun.com/synapse7/article/details/19096049****概述:使用getchar()和putchar(),以及math.h头文件中的一些函数,基本实现了以下函数scanf("%u",&x)scanf("%d",&x)scanf("%lf",&x)printf("%u",x)printf("%d",x原创 2014-02-12 00:19:27 · 2843 阅读 · 0 评论 -
C++ STL入门教程(6)——set(集合)的使用(附完整程序代码)
一、简介集合(Set)是一种包含已排序对象的关联容器。begin()返回指向第一个元素的迭代器clear()清除所有元素count()返回某个值元素的个数empty()如果集合为空,返回trueend()返回指向最后原创 2013-08-20 10:29:26 · 3943 阅读 · 0 评论 -
C++ STL入门教程(7)——multimap(一对多索引),multiset(多元集合)的使用(附完整程序代码)
一、Multimap(一对多索引)C++ Multimap和map说支持是操作相同(除了multimap不支持下标运算),但是Multimap允许重复的元素。begin()返回指向第一个元素的迭代器clear()删除所有元素count()返回一个元素出现的次数empty()如果multimap为空则返回真原创 2013-08-20 15:13:48 · 8703 阅读 · 0 评论 -
【C++ / Java】char数组和string的相互转换及自动转换
#include#includeusing namespace std;char str[100];int main(){ scanf("%s",str); string s(str);//char数组转string printf("%s",s.c_str());//string转char数组 return 0;}原创 2013-08-20 15:48:34 · 4145 阅读 · 0 评论 -
使用bitset实现二进制和十进制的相互转换
#include#include#include#include#include#includeusing namespace std;const int Size = 32;const double log_2 = log(2.0);char str[Size];int main(void){ int num; char *endstr; while (~scan原创 2013-09-26 21:36:07 · 9455 阅读 · 0 评论 -
memset另类初始化测试 (二)——double
前一篇:http://blog.youkuaiyun.com/synapse7/article/details/9884135试着对double数组进行初始化?测试代码:#include#includeint main(void){ double db[10]; for (int i = -4; i < 260; ++i)///已经覆盖了char的范围 { memset(原创 2014-02-13 13:02:15 · 2176 阅读 · 0 评论 -
C++ STL入门教程(5)——map(关联数组)的使用(附完整程序代码)
一、简介C++ Maps是一种关联式容器,包含“关键字/值”对。其内部实现是红黑树,它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。begin()返回指向map头部的迭代器clear()删除所有元素count()返回指定元素出现的次数empty()如果map为空则返回true原创 2013-08-20 10:06:42 · 4417 阅读 · 0 评论 -
C语言Unicode小记
#include #include #include #include const int SIZE = 10;int main(void){ char str[SIZE]; wchar_t wstr[SIZE]; //wchar_t wstr[] = {0x5b89, 0x5353, 0}; /*本地化,设置语言运行环境*/ setlocale(LC_ALL, "Ch原创 2014-01-06 16:41:00 · 1244 阅读 · 0 评论 -
二、中级篇——指针与数组
1. 指针与数组的关系指针和迭代器非常像,我们可以说指针就是数组的迭代器。数组具有较好的可读性,而指针具有更强的灵活性。一般,对某些多维数组中非连续的元素的随机访问用下标表示比较方便,当按递增(减)顺序访问数组时,使用指针快捷而且方便。所以在某些情况下使用指针更好,与数组相比,它可以1. 节省空间(指针只占用4字节空间) 2. 省去了调用memset()的时间#includei原创 2013-11-15 07:30:26 · 7380 阅读 · 1 评论 -
memset另类初始化测试(部分数字有注释)
我们常用memset对int数组进行初始化,替换数字可以是0或-1,但若为其他数字呢?测试代码如下:#include#includeusing namespace std;int a[20];int main(){ for (int i = -4; i < 260; i++) { memset(a, i, sizeof(a)); printf(原创 2013-08-10 20:26:17 · 2545 阅读 · 0 评论 -
C++ STL入门教程(4)——stack(栈),queue(队列),priority_queue(优先队列)的使用(附完整程序代码)
首先,这三者都是顺序容器适配器(适配器(adaptor)是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型)。本质上,适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。例如,假设deq是deque类型的容器,则可以用deq初始化一个新的栈:stack stk(deq);//带容器参数的原创 2013-08-04 22:40:27 · 3671 阅读 · 0 评论 -
C语言中内存堆和栈的区别
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝转载 2013-08-27 02:35:14 · 1852 阅读 · 0 评论 -
编程中无穷大常量的设定技巧
如果问题中各数据的范围明确,那么无穷大的设定不是问题,在不明确的情况下,很多程序员都取0x7fffffff作为无穷大,因为这是32-bit int的最大值。如果这个无穷大只用于一般的比较(比如求最小值时min变量的初值),那么0x7fffffff确实是一个完美的选择,但是在更多的情况下,0x7fffffff并不是一个好的选择。很多时候我们并不只是单纯拿无穷大来作比较,而是会运算后再做比转载 2013-08-18 20:24:47 · 1152 阅读 · 0 评论 -
while(cin>>val)的调用机理
今天看书的时候看到代码while(cin>>val),忽然就在想这样写的合法性是如何判定的。我们都知道cin是一个流对象,而>>运算符返回左边的流对象,也就是说cin>>val返回cin,于是while(cin>>val)就变成了while(cin),问题就变成了一个流对象在判断语句中的合法性。 不管是while(cin)还是if(cin),都是合法的,为什么呢?我们自己定义一原创 2013-09-30 09:24:57 · 1084 阅读 · 0 评论 -
C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
一、简介Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在O(1)内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是O(N)。Constructors构造函数Operators对vector进行赋值或比较assign()对Vector中的元素赋值原创 2013-08-04 20:52:38 · 5260 阅读 · 4 评论 -
C++ STL入门教程(3)——deque(双向队列)的使用(附完整程序代码)
一、简介deque(Double Ended Queues,双向队列)和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。二、完整程序代码/*请务必运行以下程序对照阅读*/#include #include #include #include using namespace std;void print(int num){ cout << num原创 2013-08-04 22:17:18 · 3135 阅读 · 0 评论 -
printf()和scanf()中的控制字符串与转换说明符、转换说明修饰符
一、printf()函数1. (格式)转换说明符2. (格式)转换说明修饰符注:printf()中float和double统一用%f,没有%lf这种用法,long double用%Lf二、scanf()函数1. (格式)转换说明符2. (格式)转换说明修饰符三、printf()和scanf()的*修饰符原创 2013-11-15 08:59:12 · 2267 阅读 · 0 评论 -
C++ STL入门教程(2)——list(双向链表)的使用(附完整程序代码)
一、简介Lists将元素按顺序储存在链表中。与向量(vector)相比, 它允许快速的插入和删除,但是随机访问却比较慢。(vector支持快速随机访问)在前一篇就提到过,list可以在头部进行添加删除操作,但vector不行。下面是几个不同于vector的函数。remove()从list删除元素remove_if()按指定条件删除元素原创 2013-08-04 22:01:49 · 2876 阅读 · 1 评论 -
一、初级篇——指针(*)、取地址(&)、解引用(*)与引用(&)的区别
一、初步了解——指针与取地址先看程序:#include<cstdio>int main(void){ int num = 7; int *p = # printf("%d 的地址是 %p\n", num, p); return 0;}二、如何使用指针?——解引用与指针赋值原创 2013-08-24 14:00:22 · 69227 阅读 · 8 评论 -
C和C++中十进制转八进制和十六进制
C:#includeint main(void){ unsigned int a = 123; printf("%o\n", a); // 八进制 printf("%x\n", a); // 字母小写的十六进制 printf("%X\n", a); // 字母大写的十六进制 return 0;}C++:#includeusing namespace std;v原创 2014-01-10 18:41:26 · 3291 阅读 · 0 评论 -
类型转换与字符串赋值、分割、合并、复制、比较、查询、翻转详解 (完整代码)
一、类型转换char数组转int、__int64或double:#include#include#include#includechar str[100];int main(void){ char *stopstr; gets(str); if (strchr(str, '.') == NULL) { if (strlen(str) < 10) print原创 2013-08-24 20:44:46 · 2953 阅读 · 1 评论