
C和C++
文章平均质量分 71
Coding懒懒
享受技术人生
展开
-
C和C++中三目表达式的运算
在C++primer Plus 第六版162页中有一个三目表达式的问题const char x[2]={"Jason","at your service\n"};const char*y="Quillstone";for(int i=0;i<3;i++){ cout<<((i<2)?!i?x[i]:y:x[1]);}这个令人费解的表达式打印了3个字符串如下: Jason Qills原创 2015-03-13 11:22:55 · 2866 阅读 · 0 评论 -
输入一个int型数据,计算出该int型数据在内存中存储时1的个数。
问题描述任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这道题,相信很多人可能见过下面的算法,但我相信很少有人见到本文中所有的算法。如果您上头上有更好的算法,或者本文没有提到的算法,请不要吝惜您的代码,分享的时候,也转载 2015-08-12 01:10:34 · 7328 阅读 · 0 评论 -
(int&)a与*(int*)&a
先看一段程序123456789101112131415161718192021222324252627#include "stdafx.转载 2015-07-23 11:26:04 · 1663 阅读 · 1 评论 -
vector中erase()方法详解
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素vector::erase()方法有两种重载形式如下:iterator erase( iterator _Where);1.iterator erase( iterator _First, iterator _Last);如果是删除指定位置的元素时:返回值是一个迭代转载 2015-08-16 23:29:06 · 5056 阅读 · 2 评论 -
c中字符串分割函数strtok
1. strtok介绍众所周知,strtok可以根据用户所提供的分割符(同时分隔符也可以为复数比如“,。”)将一段字符串分割直到遇到"\0".比如,分隔符=“,” 字符串=“Fred,John,Ann”通过strtok 就可以把3个字符串 “Fred” “John” “Ann”提取出来。上面的C代码为QUOTE:int in=0;c转载 2015-08-16 23:54:11 · 3201 阅读 · 0 评论 -
值传递,指针传递 ,引用传递的总结
C++中值传递、指针传递、引用传递的总结 收藏 1. 值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。void swap(int a,int b){ int temp; temp=a;转载 2015-07-24 10:08:42 · 1332 阅读 · 0 评论 -
递归的应用-组合数求解
从N个数中选择k个,共有多少组合?简单说就是求解C(N,k)。实际问题,有N个教授,要选择k个组成委员会,共有多少种组合方式?递归法:将这N个人按照编号从小到大排好, 1,2,3...,k,...N现在考虑从前M个人中选择k个,那么有两种情况:1. 第M个人选进去,那么就是从剩下的M-1个人中选择k-1个,再加上第M个组成;2. 第M个人不选进去转载 2015-08-16 15:41:49 · 5981 阅读 · 0 评论 -
不用库函数 求解立方根
题目:如标题所示,不用平方根库函数,求解一个数字的平方根。分析:这个问题有两个思路:思路1:采用二分的方式(无处不在的二分),上界初始化为数字本身,下界初始化为1,这样用二分,判断中间数字的平方和目标数字比较,再修改上界和下界,直到小于一定的阈值。思路2:采用牛顿法(数值分析中提到),采用微分的方式,从初始点开始,每次迭代,微分求解切线,然后求解切线和x轴的转载 2015-08-17 15:54:06 · 5733 阅读 · 1 评论 -
C++中 map容器的介绍
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数; mapmapstring; mapmapint; mapmapstring; mapmapchar; mapmapchar; mapmapint转载 2015-08-18 10:01:41 · 422 阅读 · 0 评论 -
C语言求最小公倍数和最大公约数三种算法
最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数求最大公约数算法:(1)辗转相除法有两整数a和b:① a%b得余数c② 若c=0,则b即为转载 2015-08-17 15:20:19 · 905 阅读 · 0 评论 -
sprintf和sscanf详解
1、前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来。从给定的字符串中提取相关内容,例如给定一个地址:http://www.bokeyuan.cn:2345,我们要从地址中提出协议,主机地址和端口号。之前对字符串和数字之间的关系不是很熟悉,工作中经常涉及到这个,如是好好总结一下。C语言提供了一些列的格式化输入输出转载 2015-08-17 16:32:04 · 750 阅读 · 0 评论 -
char*数组(c类型字符串)和c++中的string的转换、字符串比较、char*数组等问题
char ch[100];string str;把char*(c类型的string)数组转换为string:str = ch; //即可str.assign(ch); //也可把string类型转换为char*数组:strcpy(ch,str.c_str()); //即可for(int i = 0; i { ch = str.at(i);转载 2015-08-18 09:57:31 · 5071 阅读 · 0 评论 -
char、char*、char**数组
平时都用的是char数组,基本忘记了char*数组和char**数组该怎么用了char s1[10];s1[0] s1[1]等都是chars1是char*,等同于&s1[0] char*s2[10];s2[0] s2[1]等都是char**s2[0] *s2[1]等都是char,是s2[0] s2[1]指向的字符串的第一个字符s2转载 2015-08-18 10:50:38 · 1006 阅读 · 0 评论 -
char数组与char指针
char数组与char指针1、以字符串形式出现的,编译器会在结尾自动添加\0,思考,为什么? 存在的C语言方法,如strlen(s),计算字符串的长度,其中s指针。strlen要计算字符串长度,必须知道哪里是结尾,因此使用\0表示结尾。只有字符数组才有\0的概念,其它类型(int)的数组没有这个概念。因为其他类型的数组或者指针,没有strlen这种方法。 那么问题来了,int数转载 2015-08-18 10:57:00 · 1317 阅读 · 0 评论 -
C++函数中那些不可以被声明为虚函数的函数
常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。1、为什么C++不支持普通函数为虚函数? 普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思,因此编译器会在编译时邦定函数。2、为什么C++不支持构造函数为虚函数? 这个原因很简单,主要是从语义上考虑转载 2015-09-03 18:25:34 · 533 阅读 · 0 评论 -
sscanf()总结
在做一道九度上机题时,突然发现sscanf()函数非常有用,就顺便从网上搜集资料整理一下。 sscanf() 的作用:从一个字符串中读进与指定格式相符的数据.原型: int sscanf (const char *str,const char * format,........);说明: sscanf()会将参数str的字符串根据参数format字符串来转载 2015-08-19 09:38:10 · 463 阅读 · 0 评论 -
fork()函数详解
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来转载 2015-07-18 23:31:34 · 555 阅读 · 1 评论 -
fork()+printf(/n)或printf()的区别?
前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的:题目:请问下面的程序一共输出多少个“-”?#include #include #include int main(void){ int i; for(i=0; i<2; i++){ fo转载 2015-07-18 23:40:15 · 3067 阅读 · 5 评论 -
math.pow()函数
头文件:#include pow() 函数用来求 x 的 y 次幂(次方),其原型为: double pow(double x, double y);pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = xy。可能导致错误的情况:如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误。原创 2015-04-22 10:15:08 · 52166 阅读 · 0 评论 -
复制构造函数,赋值操作符重载之间的区别
何时调用拷贝(复制)构造函数:StringBad ditto (motto); StringBad metoo = motto; StringBad also = StringBad(motto); StringBad * pStringBad = new StringBad (motto);以上4中方式都将调用:StringBad(const StringBad &)原创 2015-04-22 18:59:56 · 736 阅读 · 0 评论 -
C++的const和C语言#define
const更好用,原因在于:1,它能够明确指定类型,有类型检查功能。2,可以使用C++的作用域规则将定义限制在特定的函数或文件中。3,可以将const用于更复杂的类型,比如数组和结构。const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝。#define宏是在预编译阶段进行替换,而cons原创 2015-04-22 16:14:06 · 445 阅读 · 0 评论 -
为什么前缀++/--比后缀++/--的效率高?
首先切记一句话:前缀++比后缀++的效率高,返回引用的效率比返回对象的效率高,所以前缀++返回引用,后缀++返回对象。对于内置类型和当代的编译器而言,这看似不是什么问题。然而,C++允许您针对类定义这些运算符,在这种情况下,用户这样定义前缀函数:将值加1,然后返回结果;但后缀版本首先复制一个副本,将其加1,然后将复制的副本返回。因此,对于类而言,前缀版本的效率比后缀版本高。总之,对于内原创 2015-04-22 16:28:14 · 2322 阅读 · 0 评论 -
c++逗号运算符
到目前为止,逗号运算符最常见的用途是将两个或更多的表达式放到一个for循环表达式中。逗号运算符的特性有下面几个:它确保先计算第一个表达式,然后计算第二个表达式;i = 20, j = 2 * i; // i set to 20, then j set to 40逗号表达式的值是第二部分的值。例如,上面表达式的值为40。在所有运算符中,逗号运算符的优先级是最低的。例如:cats =转载 2015-04-22 16:37:01 · 3085 阅读 · 0 评论 -
C++标准程序库中类 ios_base 的用法
ios_base 是C++标准程序库中的一个类,定义于头文件中。ios_base类封装了C++标准中的流输入输出中不依赖于读写的数据的类型的基本信息,如格式化信息、异常状态、事件回调函数等。原创 2015-04-01 09:28:57 · 23326 阅读 · 4 评论 -
a+++++b中a++不能做左值
1)首先说左值和右值的定义:变量和文字常量都有存储区,并且有相关的类型。区别在于变量是可寻址的(addressable)对于每一个变量都有两个值与其相联:1).它的数据值,存储在某个内存地址中。有时这个值也被称为对象的右值(rvalue,读做are-value).我们也可认为右值的意思是被读取的值(read value)。文字常量和变量都可 被用作右值。2).它的地址值——即转载 2015-04-16 17:29:14 · 586 阅读 · 0 评论 -
[leetcode]Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).You are given a target value to search. If found in the array return its原创 2015-04-20 17:06:00 · 456 阅读 · 0 评论 -
构造函数为何不能为虚函数?
1,从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。2,从使用角度 虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身就是要初始化转载 2015-04-28 11:14:09 · 916 阅读 · 0 评论 -
析构函数为何可以为虚函数?
首先要明确:1.每个析构函数(不加 virtual) 只负责清除自己的成员。2.可能有基类指针,指向的确是派生类成员的情况。(这是很正常的), 那么当析构一个指向派生类成员的基类指针时,程序就不知道怎么办了。 所以要保证运行适当的析构函数,基类中的析构函数必须为虚析构。 基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用转载 2015-04-28 11:22:23 · 417 阅读 · 0 评论 -
vector的reserve和resize
vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!原因如下: reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。 r转载 2015-05-07 17:37:12 · 340 阅读 · 0 评论 -
sizeof和strlen的区别
一、sizeof sizeof(...)是运算符,而不是一个函数。 一个简单的例子:int a;cout 在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的转载 2015-07-28 00:54:56 · 378 阅读 · 0 评论 -
C++单例模式
单例模式单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了。一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一转载 2015-08-24 16:20:47 · 449 阅读 · 0 评论 -
C++类、结构对象内存布局浅析
最近面试多,出的题目很多都有如下形式,给定一个class或者struct的定义,例如这样:[cpp] view plaincopystruct node { int a; char b; int c; char d; }; 问题是:sizeof(node) = ?转载 2015-07-17 17:22:00 · 379 阅读 · 0 评论 -
C语言---函数返回局部变量
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意转载 2015-09-08 10:42:36 · 900 阅读 · 0 评论