C与C++
starbug
这个作者很懒,什么都没留下…
展开
-
反转一个整数的位
int reverseBits(unsigned x){ int val = 0; for(int i = 0;i < 32;i++) { val = (val<<1) | (x&0x1); x >>= 1; } return val;}原创 2014-03-23 16:44:27 · 575 阅读 · 0 评论 -
vector实现(待补充)
templateclass vector{public: //ctor vector() : data_(NULL), size_(0) { } explicit vector( size_t n, const T& value = T()) { data_ = new T[n]; for (s原创 2014-03-19 16:19:43 · 546 阅读 · 0 评论 -
C++内存布局
转自http://www.cnblogs.com/kekec/archive/2013/01/27/2822872.html#类中的元素0. 成员变量 1. 成员函数 2. 静态成员变量 3. 静态成员函数 4. 虚函数 5. 纯虚函数#影响对象大小的因素0. 成员变量 1. 虚函数表指针(_vftptr) 2. 虚基类表指针(_转载 2014-03-15 17:30:48 · 568 阅读 · 0 评论 -
placement new
placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator new( size_t, void *p ) throw() { return p; } 首先我们区分下几个容易混淆的关键词:new、转载 2014-03-05 22:38:40 · 547 阅读 · 0 评论 -
为什么内联函数,构造函数,静态成员函数不能为virtual函数?
http://blog.csdn.net/ylong17/article/details/6652344为什么内联函数,构造函数,静态成员函数不能为virtual函数?1> 内联函数内联函数是在编译时期展开,而虚函数的特性是运行时才动态联编,所以两者矛盾,不能定义内联函数为虚函数2> 构造函数构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础转载 2014-03-03 00:09:45 · 822 阅读 · 0 评论 -
c/c++面试题
近期面试,下面这些是经常被问到的C/C++基础的内容。1. 一般问const、static、extern、mutable、volatile的用法和注意点? 2.new失败和malloc失败答: C++中new失败会抛异常,默认不会返回NULL,int* p = new (std::nothrow) int,这样new失败后才返回NULL。对于C++转载 2013-12-07 15:22:13 · 519 阅读 · 0 评论 -
string类实现
http://coolshell.cn/articles/10478.html转载 2014-03-01 16:51:02 · 466 阅读 · 0 评论 -
2.2
1、联合输出#include stdio.h>union{ int i; char x[2];}a;void main(){ a.x[0] =10; a.x[1] =1; printf("%d",a.i);}答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)2、头文件中的ifndef/原创 2013-12-03 19:59:36 · 698 阅读 · 0 评论 -
结构体对齐问题
有8字节类型时候要注意下,如double,long long ,gcc会把8字节类型按4字节对齐,而mingw32-gcc按8字节来对齐http://stackoverflow.com/questions/20353757/why-are-the-values-returned-by-sizeof-compiler-dependent其实这东西本来就没有肯定答案,依赖于体系结构、编译器原创 2014-01-13 20:17:47 · 496 阅读 · 0 评论 -
offsetof与container_of宏
#include #define offset(s,m) (size_t)&(((s*)0)->m)typedef struct{ char c; int a;}s;int main(){ printf("%u %u\n",offset(s,c),offset(s,a)); return 0;}大量存在于linux内核中!!!原创 2014-01-06 16:28:05 · 633 阅读 · 1 评论 -
杂C/C++代码题
1、写出下面代码的输出[cpp] view plaincopy#include int main(){ char *p="abcdef"; char str[]="123456"; printf("d%\n",*(p+4)); printf("c%\n",p[4]);原创 2013-12-10 11:34:16 · 685 阅读 · 0 评论 -
内存池
总结下常见的C++内存池,以备以后查询。应该说没有一个内存池适合所有的情况, 根据不同的需求选择正确的内存池才是正道.(1)最简单的固定大小缓冲池 适用于频繁分配和释放固定大小对象的情况, 关于这个内存池,我这里总结过:一个高效的内存池实现(2)dlmalloc 应该来说相当优秀的内存池, 支持大对象和小对象,并且已被广泛使用。到这里下载:ftp转载 2013-12-20 16:30:55 · 593 阅读 · 0 评论 -
谈谈你对面向对象编程的认识
面向对象编程强调抽象、封装、继承、多态抽象:我们在定义一个抽象类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象。你可以这样来想,抽象就是一个类的最基础的东西,比方说人,他的抽象类可能就是都从母体出来,有皮肤。但具体到你是黑人,白人,还得黑人类,白人类来说明 。封装:就是将类的属性包装起来,不让外界轻易的知道他的内部实现转载 2013-12-12 10:35:36 · 582 阅读 · 0 评论 -
HashMap与HashTable区别
HashMap基于Hashtable实现,不同之处在于HashMap是非同步的,并且允许null,即null value和null key,Hashtable则不允许null,详见:http://oznyang.iteye.com/blog/30690。此外,记住一点:hashmap/hashset等凡是带有hash字眼的均基于hashtable实现,没带hash字眼的如set/map均是基于红黑原创 2013-12-05 00:03:26 · 555 阅读 · 0 评论 -
++i 与i++的效率
这个问题是分两种情况的:1、对于内置数据类型,以现在的编译器的优化水平,前++和后++没区别的,这个可以通过看汇编代码证明2、对于自定义数据类型,像STL,前++的效率要高于后++,所以STL中关于iterator都是前++的原创 2013-12-04 22:34:46 · 473 阅读 · 0 评论 -
2.1
1. C中static有什么作用 (1)隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。 (2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。 (3)sta原创 2013-12-03 18:43:13 · 544 阅读 · 0 评论 -
关于C++中虚函数表存放位置的思考
http://blog.chinaunix.net/uid-26611383-id-3772200.html原创 2014-03-26 17:56:13 · 589 阅读 · 0 评论