----------C/C++
mfcheer
他不停地跑啊跑 就为了追上那个曾经被寄予厚望的自己
展开
-
C语言:位异或运算符^
C语言:位异或运算符^ 位运算符家族中,最常用的,某过于异或运算符。异或运算符是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0例如:10100001^00010001=101100000^0=0,0^1=1 可理解为: 0异或任何数,其结果=任何数1^0=1,1原创 2014-10-31 10:39:37 · 15371 阅读 · 1 评论 -
C++primer 17.2 bitset类型
bitset类型使得位运算更为容易,定义在头文件bitset中定义和初始化bitset定义bitset时需声明包含多少位: bitset<32> bits(1u);//定义一个32位第一位为1 其他位为0 的bitsetbitset初始化的方法: bitset<n> b; n位均为0 bitset<n> b(u); 对u的低n位拷贝 bitset<n> b(s, po原创 2015-11-01 20:56:35 · 100 阅读 · 0 评论 -
C++ 模板与泛型编程
例子:比较两个值的函数模板template <typename T>int compare(const T &t1, const T &t2){ if (t2 < t1) return 1; if (t1 < t2) return -1; return 0;}编写泛型代码的两个重要原则: 1 模板中函数参数是const的引用 2 函数体中条件判断仅适用<比较运算符模原创 2015-08-07 01:20:08 · 590 阅读 · 0 评论 -
为什么构造函数不能为虚函数(转)
1从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。2从实现上看,vbtl在构造函数调用后才建立,因而构造函数不可能成为虚函数 从实际含义上看,在调用构造函数时还不能确定对象的真实类型原创 2015-10-31 16:08:26 · 356 阅读 · 0 评论 -
hdu-1004
map的应用#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;int main() { int n; map s; while原创 2014-10-31 10:44:31 · 488 阅读 · 0 评论 -
数组指针和指针数组
这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4] 指针数组原创 2015-06-10 00:41:44 · 547 阅读 · 0 评论 -
指针函数与函数指针
概念【指针函数】:返回指针的函数。重点是它是一个函数,只是返回值由普通的值或对象变成了指针,也就是说这个函数返回的是一块内存的地址。【函数指针】:指向函数的指针。重点是它是一个指针,只是它指向的内容由普通的变量或对象变成了函数,也就是说它可以指向函数的入口地址。指针函数#include <iostream>using namespace std;class MyType{public:原创 2015-09-20 23:40:46 · 73 阅读 · 0 评论 -
源代码到可执行文件过程
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。源代码-->预处理-->编译-->优化-->汇编-->链接-->可执行文件Source--(编译)--> Assembly--(汇编)-->Obj--(链接)-->PE/ELF1.编译预处理读取c原创 2014-10-21 23:59:43 · 597 阅读 · 0 评论 -
C++ volatile关键字
volatile的介绍volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 #include void main(){ volatile int i = 1原创 2015-03-01 21:33:18 · 922 阅读 · 0 评论 -
C++ inline 函数(转)
(一)inline函数(摘自C++ Primer的第三版)在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/}; inline 函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,inline函数必须在调用该函数的每个原创 2015-03-09 18:59:00 · 839 阅读 · 0 评论 -
sizeof 计算原则
sizeof()计算类大小的一些基本原则: (1)类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑; (2)类的总大小也遵守类似class字节对齐的,调整规则;(参考5分钟搞定内存字节对齐) (3)成员函数都是不会被计算的; (4)如果是子类,那么父类中的成员也会被计算; (5)虚函数由于要维护虚函数表,所以要占据一个指针大小,也就是4字节。总结即:一个原创 2016-03-08 19:55:29 · 660 阅读 · 0 评论 -
虚函数实现原理(转)
虚函数表(Virtual Table),简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。在类的对象地址空间中存储一个该虚表的入口,占4个字节虚原创 2016-09-10 00:04:04 · 320 阅读 · 0 评论 -
内存分配函数(C语言)
C 标准函数库提供了许多函数来实现对堆上内存管理 malloc函数:malloc函数可以从堆上获得指定字节的内存空间(必须初始化) free函数:释放内存,防止内存泄露 calloc函数:与 malloc类似,但不需要初始化 realloc函数:重新分配内存头文件stdlib.hmallocmalloc函数可以从堆上获得指定字节的内存空间,其函数原型如下:void * malloc(int原创 2016-09-18 02:10:47 · 3999 阅读 · 0 评论 -
C++primer 17.4 随机数
c语言的库函数 rand 生成的随机数为为随机数。 c++提供随机数引擎类和随机数分布类、 头文件: random随机数引擎:随机数引擎的例子:default_random_engine e;for (int i = 1;i <= 10;i++) cout << e() << endl;//e()对象生成下一个随机数随机数引擎操作 default_random_engine e;原创 2015-11-01 19:13:57 · 742 阅读 · 0 评论 -
输入输出外挂
遇到卡时间比较死的题目的时候可以用#include #include #include #include #include using namespace std;//适用于正负整形数template inline bool scan_d(T &ret) { char c; int sgn; if (c = getchar(), c == EOF) return 0原创 2015-03-15 21:31:08 · 680 阅读 · 0 评论 -
unique 函数 c++
一 unique函数 作用:从序列中“删除”所有相邻的重复元素。 既然是删除相邻的重复元素,所以要保证序列有序,用之前要把序列排序,调用sort()函数。在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址。注意,num的大小并没原创 2015-07-29 10:20:33 · 1134 阅读 · 0 评论 -
C++ static 关键字
C++的static有两种用法: 面向过程程序设计中的static 和 面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:[cpp] view转载 2014-12-19 19:27:20 · 512 阅读 · 0 评论 -
atof 函数说明
/*函数名: atof功 能: 把字符串转换成浮点数名字来源:ascii to floating point numbers 的缩写用 法: double atof(const char *nptr);atof(将字串转换成浮点型数)表头文件 #include 定义函数 double atof(const char *nptr);函数说明 atof()会扫描参数nptr字符串,原创 2015-01-29 20:29:40 · 1061 阅读 · 0 评论 -
c/c++ 随机数
#include #include #include #include #include #include //头文件#include using namespace std;int main (){ srand(time(NULL));//初始化随机数 //srand(time(0));//初始化随机数 //srand(10);//初始化随机数 for(int i原创 2014-12-05 16:05:32 · 527 阅读 · 0 评论 -
c++ decltype
返回值 decltype(表达式)[返回值的类型是表达式参数的类型]这个可也用来决定表达式的类型,就像Bjarne暗示的一样,如果我们需要去初始化某种类型的变量,auto是最简单的选择,但是如果我们所需的类型不是一个变量,例如返回值这时我们可也试一下decltype。现在我们回看一些例子我们先前做过的,[cpp] view转载 2014-12-23 21:43:11 · 635 阅读 · 0 评论 -
STL 之 pair 和map
STL的头文件中描述了一个非常简单的模板类pair,用来表示一个二元组或元素对,并提供了大小比较的比较运算符模板函数。pair模板类需要两个参数:首元素的数据类型和尾元素的数据类型。pair模板类对象有两个成员:first和second,分别表示首元素和尾元素。在中已经定义了pair上的六个比较运算符:、=、==、!=,其规则是先比较first,first相等时再比较second,转载 2014-11-29 23:48:03 · 596 阅读 · 0 评论 -
stl 之 优先队列
priority_queue特别之处在于,允许用户为队列中存储的元素设置优先级。这种队列不是直接将新元素放置在队列尾部,而是放在比它优先级低的元素前面。标准库默认使用优先队列有两种,一种是最大优先队列;一种是最小优先队列;每次取自队列的第一个元素分别是优先级最大和优先级最小的元素。原创 2014-11-16 23:46:47 · 488 阅读 · 0 评论 -
stl reverse 函数
功能:翻转字符串 ,翻转数组, 用于STL的翻转。头文件: 例子:#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;char s[100];原创 2015-02-04 13:49:16 · 2322 阅读 · 0 评论 -
四种GCC内置位运算函数
int __builtin_ffs (unsigned int x) 返回x的最后一位1的是从后向前第几位,比如7368(1110011001000)返回4。 int __builtin_clz (unsigned int x) 返回前导的0的个数。 int __builtin_ctz (unsigned int x) 返回后面的0个个数,和__builtin_clz相对。 int __原创 2015-06-06 01:02:51 · 446 阅读 · 0 评论 -
INT ,LONG , LONG LONG类型的范围
输出:unsigned int 0~4294967295 %uint 2147483648~2147483647 %dunsigned long 0~4294967295原创 2015-06-05 23:23:22 · 579 阅读 · 0 评论 -
类型别名
传统方法 使用 typedef 关键字 用法 :typedef LOL long long ;c11 新标准 :using LOL = long long; = 左边的名字规定为右侧的别名。原创 2015-06-09 00:49:11 · 1341 阅读 · 0 评论 -
c++ string 类的 ”数值转换“ 操作
实现标准库string和数值数据之间的转换。int a = 45;string s = to_string(a);//将整数转换为string表示形式double d = stod(s);//将字符转换为浮点数其他函数:stoi(s, p, b);//返回s字符串的整数表达的数值。依次为 int, long ,unsigned long, long long, unsigned long lon原创 2015-07-26 11:01:34 · 759 阅读 · 0 评论 -
解决爆栈,手动加栈!
解决爆栈最好的方法是改变写法,用BFS,或者用数组模拟栈。c++: 放在头文件前面#pragma comment(linker,"/STACK:1024000000,1024000000")原创 2015-07-29 17:13:08 · 2576 阅读 · 0 评论 -
C/C++之回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。函数指针 (1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运原创 2015-09-23 11:31:48 · 424 阅读 · 0 评论