C++ 牛客网做题笔记【300题总结】
2017-04-13 09:03
239 查看
1:fork函数复制时将父进程的所有资源都通过复制数据结构进行了复制,然后传给子进程,所以fork函数不带参数。fork()是全部复制,vfork()是共享内存。
clone()是可以将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要复制哪些资源给子进程,由参数列表中的clone_flags来决定。另外,clone()返回的是子进程的pid。
clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等
2:int a(5) 就相当于 int a = 5
3:若想引用一个已经定义过的全局变量,需要使用extern关键字方式
4:多线程调用时,主要是针对全局变量和静态变量的保护,函数内部的局部变量不会受到影响,因为每个线程都有一个栈以保护自己的局部变量
5:read()函数是UNIX或类UNIX系统的系统函数,无缓冲区,fread()是C库的库函数,有缓冲区。read()是系统调用的:从打开的设备或者文件中读取文件
6:动态绑定中,父类指针访问的虚函数可能是子类中的也可能是基类中的
7:vector为动态数组,插入元素最糟糕的时间复杂度为O(n),set查找,基于树,最糟糕要O(logn),涉及到红黑树,hash_map用hash值映射,为O(1),deque队列,把尾部指针指向下一个位置即可,为O(1)
8:组合类的析构函数中并不需要显式调用其成员对象的析构函数,因为当执行类成员的析构函数时,会自动调用其对应的析构函数
9:类内定义的指针,还没有指向内存,所以在未赋值的情况下使用*p是错误的。在构造函数中,当参数为(int x)时,为形式参数(方法参数),调用完之后,其内存就释放了,所以若将 p = &x 进行赋值,再返回 *p(取出被释放空间的内存)就会出错,应该使用 p = new
int(x),令该指针指向自己申请的内存空间
10:双引号包含头文件,编译器会从编译选项的指定目录去寻找
11:构造函数中变量的初始化顺序是按照变量的声明顺序来的,而并不是依据初始化列表中的顺序
12:静态分配是指在编译时就能确定大小,由编译器进行分配,所以堆不可以进行静态分配,但是使用alloca()函数可以动态分配栈的内存空间,释放时由编译器自己释放。堆在动态分配时,要申请连续的内存空间,所以会产生内存碎片
13:delete this 只是不可以在析构函数内部,在其他函数的内部也是正常的
14:数字0的ASCII码:48
15:特殊的类内存占用情况:空类,虽然不包含任何信息,但是必须在内存中占有一定空间,否则无法使用这些实例,一般都是1;只有函数的类,只需知道函数的地址即可,而这些函数的地址只与类型有关,与类型的实例无关,编译器不会因为函数在内存中添加任何额外的信息,所以还是1;类中有虚函数,会为该函数生成虚函数表,并在该类的每一个实例中添加一个指向虚函数表的指针,32位的指针为4,64位的指针为8;
16:http://www.baidu.com 这句话单独当作一条语句不会有任何问题,后面是注释,前面是相当于case:的一种标签,public等也是标签~
17:当派生类中含对象成员时,构造函数的执行顺序为:基类->对象成员的构造函数->派生类的构造函数,析构函数执行顺序相反
18:复合赋值运算符的优先级特别低:+=,-=,*=,/=; k *= i+j 等同于 k = k * (i + j)
19:在全局域定义enum,输出x是0,在局部域定义enum,输出x是随机数
20:大端存储和小端存储0x20150810 小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址,从低地址到高地址:20 15 08 10,输出从低地址到高地址 20 15 08 10:。大端(Big-Endian):较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址,从低地址到高地址:10
08 15 20,输出从低地址到高地址 08 10 20 15 。
clone()是可以将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要复制哪些资源给子进程,由参数列表中的clone_flags来决定。另外,clone()返回的是子进程的pid。
clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等
2:int a(5) 就相当于 int a = 5
3:若想引用一个已经定义过的全局变量,需要使用extern关键字方式
4:多线程调用时,主要是针对全局变量和静态变量的保护,函数内部的局部变量不会受到影响,因为每个线程都有一个栈以保护自己的局部变量
5:read()函数是UNIX或类UNIX系统的系统函数,无缓冲区,fread()是C库的库函数,有缓冲区。read()是系统调用的:从打开的设备或者文件中读取文件
6:动态绑定中,父类指针访问的虚函数可能是子类中的也可能是基类中的
7:vector为动态数组,插入元素最糟糕的时间复杂度为O(n),set查找,基于树,最糟糕要O(logn),涉及到红黑树,hash_map用hash值映射,为O(1),deque队列,把尾部指针指向下一个位置即可,为O(1)
8:组合类的析构函数中并不需要显式调用其成员对象的析构函数,因为当执行类成员的析构函数时,会自动调用其对应的析构函数
9:类内定义的指针,还没有指向内存,所以在未赋值的情况下使用*p是错误的。在构造函数中,当参数为(int x)时,为形式参数(方法参数),调用完之后,其内存就释放了,所以若将 p = &x 进行赋值,再返回 *p(取出被释放空间的内存)就会出错,应该使用 p = new
int(x),令该指针指向自己申请的内存空间
10:双引号包含头文件,编译器会从编译选项的指定目录去寻找
11:构造函数中变量的初始化顺序是按照变量的声明顺序来的,而并不是依据初始化列表中的顺序
12:静态分配是指在编译时就能确定大小,由编译器进行分配,所以堆不可以进行静态分配,但是使用alloca()函数可以动态分配栈的内存空间,释放时由编译器自己释放。堆在动态分配时,要申请连续的内存空间,所以会产生内存碎片
13:delete this 只是不可以在析构函数内部,在其他函数的内部也是正常的
14:数字0的ASCII码:48
15:特殊的类内存占用情况:空类,虽然不包含任何信息,但是必须在内存中占有一定空间,否则无法使用这些实例,一般都是1;只有函数的类,只需知道函数的地址即可,而这些函数的地址只与类型有关,与类型的实例无关,编译器不会因为函数在内存中添加任何额外的信息,所以还是1;类中有虚函数,会为该函数生成虚函数表,并在该类的每一个实例中添加一个指向虚函数表的指针,32位的指针为4,64位的指针为8;
16:http://www.baidu.com 这句话单独当作一条语句不会有任何问题,后面是注释,前面是相当于case:的一种标签,public等也是标签~
17:当派生类中含对象成员时,构造函数的执行顺序为:基类->对象成员的构造函数->派生类的构造函数,析构函数执行顺序相反
18:复合赋值运算符的优先级特别低:+=,-=,*=,/=; k *= i+j 等同于 k = k * (i + j)
19:在全局域定义enum,输出x是0,在局部域定义enum,输出x是随机数
20:大端存储和小端存储0x20150810 小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址,从低地址到高地址:20 15 08 10,输出从低地址到高地址 20 15 08 10:。大端(Big-Endian):较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址,从低地址到高地址:10
08 15 20,输出从低地址到高地址 08 10 20 15 。
相关文章推荐
- C++ 牛客网做题笔记【600题总结】
- C++ 牛客网做题笔记【1100题总结】
- C++ 牛客网做题笔记【700题总结】
- C++ 牛客网做题笔记【900题总结】
- C++ 牛客网做题笔记【400题总结】
- C++ 牛客网做题笔记【1000题总结】
- C++ 牛客网做题笔记【1200题总结】
- C++ 牛客网做题笔记【500题总结】
- C++ 牛客网做题笔记【800题总结】
- C++ 牛客网做题笔记【200题总结】
- C++ 牛客网做题总结
- 类成员C++笔记六:static类成员总结,以及利用C++类static成员实现单例模式
- C++学习笔记&总结
- C++总结笔记(十)常见容器--Vector
- C++ 和 汇编 混合编程幼儿园经验总结**持续更新** 学习笔记贴
- C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)
- C++总结笔记(五)友元函数
- C++ 总结笔记 <一>
- C++总结笔记(八)排序算法之快速排序
- C++总结笔记(七)排序算法之插入排序