这篇主要是集合一些初学者(就是我)遇到的一些反直觉的tips,如果大家也有遇到了的,可以一起交流

此外,笔者有一点想要扯扯淡的写在最前面,学习C++我认为有一点是非常重要的,就是不忘初心吧,听起来很扯,但是其实就是这样,学习C++其实就是看中了它的高效率,对速度处理的高效和对内存管理的高效

C++要处理的是海量的数据,和超大规模的运算,因此复杂非此不可

我们要时间控制在减少每一个重复的构造函数上,减少每一次内存申请上;要把内存节约保持在每一小块内存对齐上,每一次垃圾回收上

为何C++如此复杂,因为非此不可啊

1.关于STL容器对象的大小,使用sizeof()求得的大小是不变的

举个例子:

当我初始化一个key为int类型,value为指向Order这种类的指针的map之后,第一次输出sizeof()的结果,第二次输出sizeof的结果,是一样的,即sizeof不能直接用来测试对象的大小

std::map<int,Order*> tt = std::map<int,Order*>();
cout<< sizeof(tt)<<endl;
Order* order = new Order(
1000,1000,1000 ,1000, false, false,1000);
long long a = order->getOrderId();
tt.emplace(10,order);
tt.emplace(9,order);
tt.emplace(8,order);
tt.emplace(7,order);
tt.emplace(6,order);
cout<< sizeof(tt)<<endl;

C++学习——STL内存管理(二)<一些遇到的坑>_C++

参考这个文章中的介绍,原因是这样的:

【类的大小不会随着成员内容器元素个数的增加而增大,容器中的元素个数增加不会增加容器变量的大小,原因是sizeof是无法求出容器所占的内存的,这些容器申请的大部分空间都是在堆上,栈上只有一部分用于管理的指针,测试得出sizeof(list)=24,sizeof(vector)=20,sizof(map)=28,这个数值和具体的编译器实现有关】
 

这种时候需要用到的就是

这里有几个相似的可以区分一下:

size()指 目前存在的元素数。            元素个数

capacity()指 容器能存储 数据的个数      容器 容量

reserve()指定 容器 能存储数据的个数

resize()  重新 指定 有效元素的个数 ,区别与reserve()指定 容量的大小

当创建空容器时, 容量(capacity)为 0;当用完时,增加原容量的 1/2 (各编译器 可能存在差异  vs2010是这样的,mingw则 增加原容量 )--适用如 vector这种 元素连续存储的容器, 如为list则不同。

capacity 一般大于size的原因是为了避免 每次增加数据时都要重新分配内存,所以一般会 生成一个较大的空间,以便随后的数据插入。

1.STL容器map的emplace传入对象问题

提到这个主要是为了解决一个问题,就是