摘要: STL提供六大组件,彼此可以组合套用:1.容器(containers):各种数据结构,如vector,list,deque,set,map,用来存放数据。从实作的角度看,STL容器是一种class template。2.算法(algorithms):各种常用算法如sort,search,copy,erase...,从实作的角度看,STL算法是一种function template。3.迭代器(iterators):扮演容器与算法之间的胶着剂,是所谓的 泛型指标,是一种将operator*,operator->,operator++,operator--等指标相关操作予以多载化的class 阅读全文
posted @ 2012-11-02 21:41 吉大依恋 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 1.在C++程序中调用被C编译器编译后的函数,为什么还要加extern "C"?C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为void foo(int x,int y).该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生想_foo_int_int之类的名字。C++提供了C连接交换指定符号extern "C"解决名字匹配问题。2.头文件中的ifndef/define/endif是干什么用的?防止该头文件被重复引用。 阅读全文
posted @ 2012-11-02 16:48 吉大依恋 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 面试例题1:有两个变量a和b,不用"if"、"?:"、"switch"或其他判断语句,找出两个数中间比较大的。答案:int max=(a+b+abs(a-b))/2解析:若a>b,则(a+b+abs(a-b))/2为(a+b+a-b)/2=a. 若a<b,则(a+b+abs(a-b))/2为(a+b+b-a)/2=b.面试例题2:如何将a、b的值进行交换,并且不是有任何中间变量?方案一:a=a+b;b=a-b;a=a-b;但是这样做的缺点是如果a、b都是比较大的二个数,a=a+b时就会超界。方案二:a=a^b;b=a^b; 阅读全文
posted @ 2012-11-02 16:32 吉大依恋 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 用一个表达式,判断一个数X是否是2^N次方,不可用循环语句。解析:如果一个数是2^N,那么该数的二进制表示中只有一个1,其他位均为0.由于X和X-1做与运算,即X&(X-1)能消掉X中的一个1,若结果为0,则表示X中有且仅有一个1,那么X是2^N。故表达式为:!(X&(X-1))下面代码:int f(int x,int y){ return (x&y)+((x^y)>>1)}(729+271)=解析:这道题如果使用本办法来求解,就都转化成二进制然后按位与。但是这样的做法显然不是面试官所期待的。仔细观察一下题目,x&y是取相同的位与,这个的结果是x和y 阅读全文
posted @ 2012-11-02 16:11 吉大依恋 阅读(624) 评论(0) 推荐(0) 编辑
摘要: #includeusing namespace std;int main(){ unsigned char a=0xA5; unsigned char b=~a>>4+1; printf("b=%d\n",b); system("pause"); return 0;} ... 阅读全文
posted @ 2012-11-02 15:38 吉大依恋 阅读(367) 评论(0) 推荐(0) 编辑
摘要: int main(){ int b=3;int arr[]={6,7,8,9,10};int *ptr=arr;*(ptr++)+=123;printf("%d,%d\n",*ptr,*(++ptr));system("pause");return 0;}输出为 8,8解析:int *ptr=arr; 此时ptr指向第一个元素6*(ptr++)+=123;应为*ptr=*ptr+123;ptr++;此时ptr指向第二个元素,第一个元素变为129printf("%d,%d\n",*ptr,*(++ptr));从右到左运算,第一个算*(+ 阅读全文
posted @ 2012-11-02 11:58 吉大依恋 阅读(620) 评论(0) 推荐(0) 编辑