随手记

作者: 菜鸡也会飞 | 来源:发表于2017-06-20 21:22 被阅读0次

    2017年6月20日

    1. 指针形参
    • 指针形参的行为和其它非引用类型一样→拷贝的是指针的值,拷贝后是两个不同的指针→但是指向相同的值可以通过指针形参修改它所指对象的值
    • C程序中由于没有引用,所以常使用指针类型的形参访问函数外部的对象。
    • C++中,建议使用引用类型的形参代替指针
    1. 指针
    • 指针本身是一个对象(而引用并非对象)
    • 允许对指针赋值和拷贝
    • 指针无须在定义时赋初值
    • 在块作用域定义的指针如果没有被初始化,也将拥有一个不确定的值
    1. free/malloc和new/delete
    1. string搜索操作
    • s.find(args),查找s中args第一次出现的位置
    • s.rfind(args),查找s中args最后一次出现的位置
    1. 修改string的操作
    • s.insert(pos,args)
    • s.erase(pos,len)
    • s.assign(args)
    • s.append(args)
    • s.replace(range,args)


      修改string的操作

    2017年6月21日

    1. 递归和迭代
      • 迭代使用的是循环结构,递归使用的是选择结构
    • 递归能使得程序的结构更清晰、更简洁、更容易让人理解
    • 递归调用会建立函数的副本,耗费大量的时间和内存,迭代则不需要
    • 在前行阶段,对于每一层递归,函数的局部变量、参数值以及返回地址都被压入栈中;在退回阶段,位于栈顶的局部变量、参数值和返回地址都被弹出。

    2017年6月22日

    1. 类内数组的初始化
      当类的数据成员为数组时,可以在初始化列表中初始化,也可以在构造函数函数体中用循环初始化。


      类内数组初始化.png
    2. 只能对空指针或者是new分配的指针使用delete,否则是未定义的行为。

    2017年6月26日

    1. pdf书签默认是折叠或者展开
      http://www.newasp.net/tech/66745.html
    2. 顺序容器的定义和初始化


      cpp primer p299
    3. 值初始化/默认初始化/

    2017年7月1日

    1. 容器的定义和初始化
      对于C c1(c2)这种初始化方式,除array外,c1 c2的大小可以不同。元素个数不是vector等容器类型的一部分。
      但对于数组和array来说,元素个数就是类型的一部分。


    2017年7月3日

    1. 泛型算法--reverse
    void reverse (BidirectionalIterator first, BidirectionalIterator last);
    

    复杂度:Linear in half the distance between first and last: Swaps elements.

    1. 泛型算法-sort
    2. 泛型算法-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日

    1. 转义字符
      总结:http://www.cnblogs.com/emanlee/archive/2010/05/14/1735274.html
      \ddd 三位八进制 eg. \101 八进制数101,等于十进制数的65,而65是A的ASCII码,所以如果按字符打印,会打印对应的字符,也就是打印字符A
      \xhh 二位16进制
    2. 算术表达式内数据类型不同
      5/6.0为实型,5 为int,6.0为float类型(或double),表达式自动把5转化为较大的 float类型(或double) 运算,结果为 float类型(或double)
    3. 运算符
      取地址运算符 & 解引用运算符*


      image.png
      image.png
    4. 对数组取地址


      输出为2,5
      image.png
    5. 虚函数、纯虚函数
    6. 对常量的引用

    2017年7月8日

    1. 32位机器上,一个指针占用4字节;64位机器上,一个指针占用8字节
    2. const成员函数

    2017年7月11日

    1. 静态成员和静态成员函数的总结
      https://www.nowcoder.com/test/question/done?tid=9092861&qid=56200#summary
      image.png
    2. ??
    int main(int argc ,char** argv)
    

    2017年7月12日

    1. 顺序容器中迭代器失效的情况
      http://www.jianshu.com/p/6b2575ab1b8c
    2. 如下程序,输出A,但是会出现异常。A中f没有声明为虚函数,所以不会被覆盖。另外最后的delete a有问题,因为new构造的是一个B类型的对象,delete a仅删除了属于A的部分。


      image.png

    2017年7月13日

    1. 函数重载
      函数重载指的是在同一作用域中,可以有一组具有相同函数名,不同参数列表的函数。→减少了函数名字的数目,避免命名空间污染。
      image.png
    2. 统计二进制中1的个数→x|(x+1),统计0的个数
      image.png
    3. 在堆上创建动态数组sizeof(数组名)→数组容量指向常量的指针,或者常量指针sizeof(指针)=4,计算的是指针的容量
      image.png
    4. 不同内置算数类型在内存中所占的比特数


      image.png
    5. c++→非虚函数静态绑定,虚函数动态绑定
      java/python迟绑定,统一运行时绑定


      image.png
    6. putchar()→Writes a character to the standard output
    7. 字符串'Beijing'存储在计算机中,需要7+1共8个字节,最后一个字节为'\0'
    8. C++中函数名实际上是一个指针,指向函数的入口
    9. main()中 的a,b为局部变量,覆盖了全局的a,b,而fun()中的为全局的a,b,对main()中局部的a,b没有影响


      image.png
    10. ^是按位异或!幂函数可以使用math.h里面的pow(x,y)
    11. 大数问题???
    12. 内存对齐
    • 参考链接: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日

    1. 判断质数
      http://www.cnblogs.com/xiehongfeng100/p/4332998.html
    2. 质因数分解
      http://blog.csdn.net/u014361775/article/details/47722337
    3. str被free后,其所指的内存空间被释放(在堆空间中被标记为可回收??),但是其指向的地址没有变化,成为一个野指针。此时str不是空指针,strcp(str,"world"),会将该内存覆盖为‘world’。但是理论上被释放的内存不能访问。所以printf(str)有错
      image.png
    4. 组合
      组合:一个类里面的数据成员是另一个类的对象难点在于构造函数的设计,创建对象时既要对基本类型成员进行初始化,也要对内嵌对象进行初始化
      image.png
    5. 常量


      image.png
      image.png
    6. 字符会转换成ASCII码,0.5默认类型为double既不能转换为float也不能转换为int,应该写成0.5f


      image.png

    2017年7月15日

    1. 二叉树的遍历
    • 前序遍历:先访问根节点,然后前序遍历左子树,再前序遍历右子树
    • 中序遍历:先中序遍历左子树,然后访问根节点,再中序遍历右子树
    • 后序遍历:先后序遍历左子树,然后后序遍历右子树,在访问根节点

    2017年8月5日

    1. c++输出一位有效数字
    #include<iomanip>
    cout << fixed << setprecision(1) << (double)sum / countZ<< endl;
    

    2017年8月13日

    image.png
    1. IP地址,DNS地址和子网掩码
      http://jingyan.baidu.com/article/f0e83a25afb6b722e59101e8.html

    2017年8月21日

    1. CSMA/CD
      多点接入、载波监听、冲突检测


      image.png
      image.png
    2. MAC帧
      MAC帧是数据帧的一种,而数据帧,就是数据链路层的协议数据单元。它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据包。
    image.png

    2017年8月26日

    1. 数组做形参
    • 一维数组:


      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日

    1. c++中的类和c中的struct的区别


      image.png
    2. 全局变量和局部变量的区别


      image.png

    相关文章

      网友评论

          本文标题:随手记

          本文链接:https://www.haomeiwen.com/subject/asmaqxtx.html