设为首页 加入收藏

TOP

C/C++中【提高程序效率的9个简单方法】及【20个重点笔记】(三)
2016-09-01 16:03:01 】 浏览:730
Tags:C/C 提高 程序 效率 简单 方法 重点 笔记
体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。
(2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。
(3)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。
以上都是表面的区别,实际区别就是面向过程和面向对象编程思路的区别:
C的结构体只是把数据变量给包裹起来了,并不涉及算法。
而C++是把数据变量及对这些数据变量的相关算法给封装起来,并且给对这些数据和类不同的访问权限。
C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。
13、可作为函数重载判断依据的有:参数个数、参数类型、const修饰符;
不可以作为重载判断依据的有:返回类型。
14、如何将一个小数分解成整数部分和小数部分?
要记得利用头文件中的库函数modf,下面是函数原型(记住一些实用的库函数,避免自己重写):
fractpart= double modf(double num, double *Intpart); // 将num分解为整数部分intpart和小数部分fractpart(返回值决定)
15、易误解:
如果int a[5], 那么a与&a是等价的,因为两者地址相同。
解答:一定要注意a与&a是不一样的,虽然两者地址相同,但意义类型不一样,
&a是整个数组对象的首地址,int (*p)[5];因此&a+1相当于a的地址值加上sizeof(int) * 5,也就是a[5],下一个对象的地址,已经越界了;
而a是数组首地址,也就是a[0]的地址,&a[0];a[0]的类型是int,而a+1相当于a的地址加上sizeof(int),即a[1]的地址。
16、注意sizeof不是函数而是运算符,所以在计算变量所占用空间大小时,括号是可以省略的,但在计算类型大小时括号则不能省略:
比如int i = 0; 则
sizeof int; //ERROR
sizeof i=4; //OK
17、数据库中nchar()和char()、varchar()和nvarchar()的区分?
char[10]

是定长的,也就是当你输入的字符小于你指定的数目8时,它会再后面补空值-'\0'。当你输入的字符大于指定的数时,它会截取超出的字符。
varchar[10]
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。
例如输入“hello”,那么气长度不是10,而是5+1=6,
为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
nvarchar[10]
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。
例如两字段分别有字段值:我和coffee
那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。
从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
所以一般来说,选择标准:如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar
优缺点:
char:可以看出,是利用空间换时间,处理比较方便,英文一个字节存储。
【存储很短的信息;固定长度的,比如人名,这些步长而且长度大体相当;十分频繁改变的column。】
varchar:空间效率高,节约内存;但是时间效率有所下降,容易出现 内存碎片,尤其当更新时的数据比元数据量大时,比较繁琐。另外,varchar申请的时候不能过于康概, 按需索取 对于相同的字符串,其存储空间虽然相同,但是对于内存的消耗是不同的。
18、如何解决在构造函数里统计对象计数不准确的问题
原因:可能因为拷贝构造函数而产生的对象,这样就不会调用构造函数。解决办法,提供一个显示的赋值构造函数处理计数问题。
student::student(const student &st)
{
num++;
}
19、快排中中值的选取:
(1)固定元素法:取第一个或者最后一个作为partition的pivot。
(2)随机元素法:随机生成作为partition的pivot。
(3)三数取中或者无数取中法;
20、快速排序为什么比堆排序效率高?
(1)比较的次数,堆排序比较的次数比快排多;有很多都是无谓的比较,快排每调整一次每个元素都是朝正确的位置进一步,但是堆排序不是,最后一个元素调整到第一个,下次可能又跳回到最后一个;随机性太大;
(2)cache局部性原理。堆排序都是不相邻的,数据极不友好,快排都是相邻的,移动的快,充分利用率cache。
缺点:快排是递归调用,消耗的空间较大。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇halcon/c++接口基础 之 HALCON图.. 下一篇c++中的重载,重写,重定义

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目