STL:
常用容器操作:
1.vector/list/deque
insert/erase/clear
front/back/push_back/pop_back
push_front/pop_back(vector无)
2.stack/queue/priority_queue
pop/push
top(stack+priority_queue)
front/back(queue)
3.map/set
insert/erase/clear
begin/end
find/count
unordered_map unordered_set
C/C++:
---const使用,const一般都加在类型声明前面,例外有说明指针的值不可变的情况需要加在*后面/成员函数为常成员函数时加在函数后面/。注意:常成员变量需要使用初始化列表初始化/常成员函数不得修改类中任何数据成员函数的值/常对象只能调用常成员函数。
---四个与类型转换相关的关键字:static_cast/const_cast/reinterpret_cast/dynamic_cast
static_cast:静态转换在编译处理期间,主要用于C++中内置的基本数据类型之间的转换,但是没有运行时类型的检测来保证转换的安全性。基类指针引用转换为子类指针引用是不安全的没有进行动态类型检测,子类转换为基类是安全的。void类型的指针转换成目标类型的指针是不安全的。static_cast不能转换掉expression的const/volatile/_unalogned属性。用法为变量=static_cast<目标类型>(变量)
const_cast:去常转换,编译时执行。
reinterpret_cast:重解释类型转换,是对二进制数重新理解不改变原来的格式。
dynamic_cast:在执行期决定真正的类型,在向下转换(基类转换为派生类)总是多态和不太安全的,dynamic_cast提供了安全的向下类型转换操作,只有当类型成功转换返回值才是需要的指针,否则返回空指针,安全但是需要一定的开销。
---空类型的sizeof是1,区分不同的实例,加了虚函数,例如虚析构函数,因为需要一个指向虚函数的指针所以大小会多加一个指针。
---复制构造函数的形参一定不能是类的类型,而应该是引用。
赋值运算符需要注意四点:一是返回类型类型的引用,以应对连续赋值;而是形参是类型的常引用,引用避免复制构造函数调用,常引用避免改变被引用的实例;如果申请新的内存,需要先释放之前的内存;考虑赋值的和被赋值的是否是一个对象。提示点:先释放内存再new分配内存,如果内存不足,实例以前的状态被破坏,构造临时对象,交换临时对象和被赋值对象的内存,临时对象在函数结束的时候就会自动释放内存,如果内存不足的话,会提前退出不会影响以前的实例状态。
--函数里面如果有和全局函数重名的,这个函数会不认识这个变量。
--函数参数是从右向左赋值的。
--智能指针是为了解决内存泄漏问题,当new出来的对象走出作用域,或者没有指针指向的时候,自动调用析构函数。
--进程是资源分配的单位,线程是作为独立运行和独立调度的基本单位。
--指针和引用:都是指向某块内存,指针存的是内存的地址,引用存的是别名。
指针可变,可为空,引用只有在定义时候被初始化,不可变,不可为空;“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
网友评论