
C++ 小百科
delphihero
这个家伙很懒,什么都不舍得留下
展开
-
算一个字(DWORD)里有多少bit被置1
看到别人的blog里面有道这样的面试题,答案如下(求出n中1的个数):int count=0; for (register u_long m = n;m != 0;m &= m - 1) count++;只用一行,而且循环次数(=m二进制中1的个数)很少.同样一语句实现x是否为2的若干次幂的判断int i = 512;cout原创 2005-07-03 23:56:00 · 1724 阅读 · 0 评论 -
C++常见面试题
希望这个贴子能给正在找工作的朋友一点帮助.SIZEOF 题目:如果代码里面有 while(*p) 判断字符串结束的,要用 *p!=/0 代替。1)sizeof相关系列问题, const相关系列问题a. 对于 struct s{char a;int b} sizeof(s) = 8 因为内存对齐 b. 对于 int a[200] sizeof(a) = 200* sizeof(int) =原创 2006-05-11 23:40:00 · 7503 阅读 · 1 评论 -
boost pool 内存池
简介: Pool分配是一种分配内存方法,用于快速分配同样大小的内存块, 尤其是反复分配/释放同样大小的内存块的情况。 使用: 1. pool 快速分配小块内存,如果pool无法提供小块内存给用户,返回0。 Example: void func() { boost::pool ^^^^^^^^转载 2006-09-23 02:27:00 · 3414 阅读 · 0 评论 -
避免内存碎片
许多书籍提到过内存碎片,也看到一些方法防治内存碎片。一直以来都以为频繁的分配释放内存会导致系统内存碎片过多(虽然这个想法并没有错到离谱)。后来看过计算机程序设计艺术上面关于伙伴系统的介绍,一般操作系统都采用此种方法来管理内存。频繁分配释放内存确实会导致一些系统负担,但分配的内存释放及时,内存管理系统将能够急时合并相邻空闲内存块,得到更大的空闲内存。这样并不会导致内存碎片的出现。即使相邻空间原创 2006-09-22 21:50:00 · 5686 阅读 · 0 评论 -
string的Copy-On-Write技术
标准C++类std::string的内存共享和Copy-On-Write技术 虽然vc6用了引用计数,但VC2003的字符串并没使用Copy-On-Write的特征.正如楼主例子里面 str1[1]=q,时系统要重新给st1分配了内存。早分配还是晚分配? 假设str2没有使用,对于release版本那都是只分配一次内存。但不考虑引用计数 str1[1]=q操作,早分配速度反倒好过晚原创 2006-05-14 02:04:00 · 1224 阅读 · 0 评论 -
vc的hash_map怎么啦
以下比较均基于 release 版本,debug 有调试信息不能作为标准。#include "stdafx.h"#include #include #include #include #include #include using namespace std;#pragma warning(disable : 4996)int _tmain(int argc, _TCHAR* argv[]){原创 2006-05-16 12:35:00 · 4739 阅读 · 0 评论 -
boost lambda简介
1, 简介 有的时候我们实在是很烦写一个function object了. 为了一个简单的目的, 不得不跳到很远的某一个hpp文件里面去在声明一个function object, ft. lambda能帮你去除烦恼. btw: lambda并不仅仅为了方便你"写"程序. 它能在代码优化上发挥一定的作用.2, 使用 套用一下, for_each(x, x+N, std::cout 很转载 2006-09-23 02:25:00 · 3014 阅读 · 0 评论 -
boost库xml序列化
今天利用编版本的时间研究了一下boost的序列化,特别是xml序列化的东东,还是有很多收获,记下来怕以后忘记了,人老了,很多东东都记不得了......(一)研究boost库xml序列化要做准备的工作a.下一个最新的boost库记住用1.32版本的,这个版本提供了XML序列化的支持b.windows下用的VC7.0,这个是一定要了,我一直没舍得换我的VC6,结果编译boost的seria转载 2006-09-23 01:54:00 · 5311 阅读 · 0 评论 -
stl应用小问题
1. 编译器的解析 list data(istream_iterator(cin),istream_iterator());这不是声明一个list变量 data,而是被认为是一格函数声明. 可以使用如下方法(effective stl 有讲)istream_iterator dataBeg(cin);list data(dataBeg,istream_iterator());当然还有 stack原创 2006-05-09 00:37:00 · 1393 阅读 · 0 评论 -
Fibonacci 单词
Fibonacci单词定义与Fibonacci数的定义类似: FIB(1)=b,FIB(2)=a,FIB(k+2)=FIB(k+1)*FIB(k)(k>=1),*的意思是两个字符串连接,所以FIB3=ab;FIB4=aba;FIB5=abaab; 现在给出一个长度最多为30的模式串,仅含字母a或b. 计算第n个Fib单词中含有多少个这样的模式串.模式串在Fib单词中的位置可以重叠. Input该题原创 2006-05-01 01:39:00 · 1083 阅读 · 0 评论 -
猴子分桃
/*题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?*/void taozi(){ int i,m,j,k,count; for(i=4;i {原创 2006-02-20 23:10:00 · 1423 阅读 · 0 评论 -
一些不太常用C++语法
慢慢更新:1. placement new 方法如:pi = new (ptr) int; //placement new 括号里的参数是一个指针,它指向一个内存缓冲器,new操作将在这个缓冲器上分配一个对象。Placement new的返回值是这个被构造对象的地址(比如扣号中的传递参数)。placement new主要适用于:在对时间要求非常高的应用程序中,因为这些程序分配的时间是确定的;原创 2005-08-03 22:37:00 · 2797 阅读 · 1 评论 -
windows 远程线程介绍
远程线程指把当前进程部分代码注入到其他进程做为线程执行,虽然钩子程序能挂钩其他程序的消息,但钩子程序退出,注入的dll也就退出了,而远程线程不会随着本地进程退出而结束。而且可以处理更多的事情,而不局限于消息。由于98不支持所以只能在nt内核上运行,下面是制作远程线程需要使用的api。获取进程句柄方法之一是使用GetWindowThreadProcessId函数,这个函数可以从一个窗口句柄获得创原创 2005-07-17 20:50:00 · 1671 阅读 · 0 评论 -
轻松求素数
没有作什么溢处判断.比如n 超过int 最大值,数组长度小于 len等.作为素数条件1.素数一定是奇数 :)2.素数只能整除1和他自己3.奇数如果不能整除比他小的素数,则为素数。这个范围可以更小,就是除到比这个数开方小的素数即可如果都不能整除则此数为素数。当然不能在程序里面做开方运算,速度太慢。换作 n 相对乘法比开方除法快//保证array 开辟区间比len大void prime(int* ar原创 2005-07-23 01:47:00 · 1223 阅读 · 0 评论 -
使用memset 的小问题
一直没有注意memset是串操作,平时都是用memset(array,0,cout*sizeof())很少用赋其他的值. 结果调用memset(array,1,100*sizeof(int)) 时发现int 数组里面乱七八糟.:P. 呵呵对于字符串数组赋值是正常,拿来对整形数组赋值就不对了。希望大家不犯这样的错误对于上面调用反汇编代码如下:mov eax,10101原创 2005-07-03 23:21:00 · 1988 阅读 · 2 评论 -
boost timer类介绍
1, 简介 很多时候我们写程序都要计算一下时间. 其实就是在一个操作两端记录一下时 间, 然后减一下. 如果我们懒到这个动作都想省掉, 那就用boost::timer吧.2, 使用 有三个可以用的类类progress_timer在离开定义自己的scope之后就会自动销毁, 并且显示经过的时间.#include #include #include #include int main(){转载 2006-09-23 02:23:00 · 3450 阅读 · 0 评论