C++ 11标准之中,定义了unordered_map,就是一种hash_map 。程序员
相同点:安全
1. 两者的用法相同,有insert,size,count等操做。全部元素是以pair类型存储。函数
不一样点:指针
1. 底层实现不一样。map是基于rb_tree, hash_map是基于哈希表。对象
2. hash_map的速度更快,查找速度为O(1)。map的查找速度是O(log(n))。插入数据的速度一样,hash_map的速度会快不少。内存
3. hash_map相比于map会消耗更多的存储空间,因此须要控制内存空间的时候需慎重使用hash_map。字符串
1. vector为对象分配连续的空间,因此随机访问的效率很高。适合存储小容量内容。大容量数据的话,vector的开销成本太大。编译器
2. list 是离散存储的,在首尾插入元素,效率很高。hash
vector:对象数量变化少,随机访问元素频繁。编译
list: 对象数量变化大,对象复杂,插入和删除频繁。
1. 栈: 编译器自动分配和释放。存放局部变量值等等。
2. 堆: 程序员分配和释放,或者程序结束时候OS回收。
3. 全局区(静态区):这两者在一块儿。程序结束以后释放。
4. 文字常量区:常量字符串存放的地方。
5. 程序代码区:存放程序代码。
它是存储指向动态分配对象指针的类,用于生存期控制,可以自动正确的销毁动态分配的对象,防止内存泄露。他使用的方法是引用计数。每次建立智能指针类的对象时,计数置为1。对该对象赋值时,赋值操做符作操做时所指向的对象减掉1。右操做符指向对象计数+1。若是引用计数减为0,删除基础对象。
多态就是讲子类类型的指针赋值给父类类型的指针。
虚函数经过一张虚函数表实现。当咱们用父类指针操做子类时,用这张表来查找实际应该调用哪个函数。
引用不能为空,指针可为空,不过最好不要为空。
引用定义时必须初始化,指针没必要。
引用不改变指向,指针会。
引用更安全。
静态绑定:对象是静态类型。出虚函数以外全都是静态绑定。
动态绑定:对象是动态的类型。发生在运行期。只有虚函数可使用。