2017年6月20日
- 指针形参
- 指针形参的行为和其它非引用类型一样→拷贝的是指针的值,拷贝后是两个不同的指针→但是指向相同的值→可以通过指针形参修改它所指对象的值
- C程序中由于没有引用,所以常使用指针类型的形参访问函数外部的对象。
- C++中,建议使用引用类型的形参代替指针
- 指针
- 指针本身是一个对象(而引用并非对象)
- 允许对指针赋值和拷贝
- 指针无须在定义时赋初值
- 在块作用域定义的指针如果没有被初始化,也将拥有一个不确定的值
- free/malloc和new/delete
- string搜索操作
- s.find(args),查找s中args第一次出现的位置
- s.rfind(args),查找s中args最后一次出现的位置
- 修改string的操作
- s.insert(pos,args)
- s.erase(pos,len)
- s.assign(args)
- s.append(args)
-
s.replace(range,args)
修改string的操作
2017年6月21日
- 递归和迭代
- 迭代使用的是循环结构,递归使用的是选择结构
- 递归能使得程序的结构更清晰、更简洁、更容易让人理解
- 递归调用会建立函数的副本,耗费大量的时间和内存,迭代则不需要
- 在前行阶段,对于每一层递归,函数的局部变量、参数值以及返回地址都被压入栈中;在退回阶段,位于栈顶的局部变量、参数值和返回地址都被弹出。
2017年6月22日
-
类内数组的初始化
当类的数据成员为数组时,可以在初始化列表中初始化,也可以在构造函数函数体中用循环初始化。
类内数组初始化.png - 只能对空指针或者是new分配的指针使用delete,否则是未定义的行为。
2017年6月26日
- pdf书签默认是折叠或者展开
http://www.newasp.net/tech/66745.html -
顺序容器的定义和初始化
cpp primer p299 - 值初始化/默认初始化/
2017年7月1日
-
容器的定义和初始化
对于C c1(c2)这种初始化方式,除array外,c1 c2的大小可以不同。元素个数不是vector等容器类型的一部分。
但对于数组和array来说,元素个数就是类型的一部分。
2017年7月3日
- 泛型算法--reverse
void reverse (BidirectionalIterator first, BidirectionalIterator last);
复杂度:Linear in half the distance between first and last: Swaps elements.
- 泛型算法-sort
- 泛型算法-count
- 用法
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type count (InputIterator first, InputIterator last, const T& val);
- Returns the number of elements in the range [first,last) that compare equal to val.
- The function uses operator== to compare the individual elements to val.
- 复杂度:Linear in the distance between first and last: Compares once each element.
- eg
int a = count(str.begin(),str.end(),'a');
2017年7月5日
- 转义字符
总结:http://www.cnblogs.com/emanlee/archive/2010/05/14/1735274.html
\ddd 三位八进制 eg. \101 八进制数101,等于十进制数的65,而65是A的ASCII码,所以如果按字符打印,会打印对应的字符,也就是打印字符A
\xhh 二位16进制 - 算术表达式内数据类型不同
5/6.0为实型,5 为int,6.0为float类型(或double),表达式自动把5转化为较大的 float类型(或double) 运算,结果为 float类型(或double) -
运算符
取地址运算符 & 解引用运算符*
image.png
image.png -
对数组取地址
输出为2,5
image.png - 虚函数、纯虚函数
- 对常量的引用
2017年7月8日
- 32位机器上,一个指针占用4字节;64位机器上,一个指针占用8字节
- const成员函数
2017年7月11日
- 静态成员和静态成员函数的总结
https://www.nowcoder.com/test/question/done?tid=9092861&qid=56200#summary
image.png - ??
int main(int argc ,char** argv)
2017年7月12日
- 顺序容器中迭代器失效的情况
http://www.jianshu.com/p/6b2575ab1b8c -
如下程序,输出A,但是会出现异常。A中f没有声明为虚函数,所以不会被覆盖。另外最后的delete a有问题,因为new构造的是一个B类型的对象,delete a仅删除了属于A的部分。
image.png
2017年7月13日
- 函数重载
函数重载指的是在同一作用域中,可以有一组具有相同函数名,不同参数列表的函数。→减少了函数名字的数目,避免命名空间污染。
image.png - 统计二进制中1的个数→x|(x+1),统计0的个数
image.png -
在堆上创建动态数组,sizeof(数组名)→数组容量,指向常量的指针,或者常量指针,sizeof(指针)=4,计算的是指针的容量
image.png -
不同内置算数类型在内存中所占的比特数
image.png -
c++→非虚函数静态绑定,虚函数动态绑定
java/python迟绑定,统一运行时绑定
image.png - putchar()→Writes a character to the standard output
- 字符串'Beijing'存储在计算机中,需要7+1共8个字节,最后一个字节为'\0'
- C++中函数名实际上是一个指针,指向函数的入口
-
main()中 的a,b为局部变量,覆盖了全局的a,b,而fun()中的为全局的a,b,对main()中局部的a,b没有影响
image.png - ^是按位异或!幂函数可以使用math.h里面的pow(x,y)
- 大数问题???
- 内存对齐
- 参考链接:http://www.cnblogs.com/jijiji/p/4854581.html
- 参考链接:http://www.cnblogs.com/zrtqsk/p/4371773.html
- 规则:第一个数据成员位于偏移为1的位置,以后每个数据成员的偏移量必须是min(#pragma back()指定的数,数据成员自身长度)的倍数;所有数据成员对齐后,要对当前结构体进行对齐,整个结构体长度应该是min(#pragma back()指定的数,最大数据成员长度)的整数倍
- 内存对齐的作用:平台原因→不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常;硬件原因→内存对齐后,CPU内存访问速度大大提升,这是因为CPU在读取内存时是一块一块进行读取的,块的大小称作memory granularity内存读取粒度→内存对齐时,CPU一次就能读取整个数据,内存未对齐,变量跨两个内存块,就要先读取两个内存块,然后组合两个内存块中的数据,操作数目大大增加**
2017年7月14日
- 判断质数
http://www.cnblogs.com/xiehongfeng100/p/4332998.html - 质因数分解
http://blog.csdn.net/u014361775/article/details/47722337 - str被free后,其所指的内存空间被释放(在堆空间中被标记为可回收??),但是其指向的地址没有变化,成为一个野指针。此时str不是空指针,strcp(str,"world"),会将该内存覆盖为‘world’。但是理论上被释放的内存不能访问。所以printf(str)有错
image.png - 组合
组合:一个类里面的数据成员是另一个类的对象→难点在于构造函数的设计,创建对象时既要对基本类型成员进行初始化,也要对内嵌对象进行初始化
image.png -
常量
image.png
image.png -
字符会转换成ASCII码,0.5默认类型为double既不能转换为float也不能转换为int,应该写成0.5f
image.png
2017年7月15日
- 二叉树的遍历
- 前序遍历:先访问根节点,然后前序遍历左子树,再前序遍历右子树
- 中序遍历:先中序遍历左子树,然后访问根节点,再中序遍历右子树
- 后序遍历:先后序遍历左子树,然后后序遍历右子树,在访问根节点
2017年8月5日
- c++输出一位有效数字
#include<iomanip>
cout << fixed << setprecision(1) << (double)sum / countZ<< endl;
2017年8月13日
- IP地址,DNS地址和子网掩码
http://jingyan.baidu.com/article/f0e83a25afb6b722e59101e8.html
2017年8月21日
-
CSMA/CD
多点接入、载波监听、冲突检测
image.png
image.png - MAC帧
MAC帧是数据帧的一种,而数据帧,就是数据链路层的协议数据单元。它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据包。
2017年8月26日
- 数组做形参
-
一维数组:
image.png - 二维数组:void test(int a)→调用时需要test((int) a),强制类型转换;void test(int a[][10]);void test(int a[10][3]);
image.png
2017年9月6日
-
c++中的类和c中的struct的区别
image.png -
全局变量和局部变量的区别
image.png
网友评论