1:所有的容器都是存的副本,因此stl容器中的元素都必须能够被拷贝。
2:vector a pushback时候其实调用了myclass的拷贝构造函数将参数b拷贝进去的,数据B在出了a的作用域后将通过析构函数自己释放自己。
3:拷贝构造函数:自己调用的,如果没有自己定义的时候,则只是简单的把对象每个成员变量的值设置为与原来的对象相等,相当于memcpy,浅拷贝问题。因此要自己定义拷贝构造函数。
4:vector可以预定一个数量 reserve,提高效率,否则按照0 1 2这样动态搬运。两倍空间搬运 这个时候不光这次新的pushback需要调用拷贝构造,之前旧的也需要在调用一次拷贝构造。
因此心得就是:容量按照两倍递增,为了提高程序的效率,最好一开始就reverse确定vector的大小,避免动态扩展。
迭代器问题:vector或者deque这种顺序容器,使用迭代器删除元素后,当前迭代器失效,因此返回的值需要接过来啊 否则在循环删除的时候会有问题。
vectordata = {1,2,3,4,5,6,7,8,9};
for(autoiter = data.begin(); iter != data.end();)
{
iter = data.erase(iter);
}
而map list这种非线性的不影响,因此可以在删除前通过++拿到之后的迭代器 可以这样写
map<int, int> dataMp = { {1,2},{3,4},{5,6} };
for (auto iter = dataMp.begin(); iter != dataMp.end();)
{
// 两种都可
dataMp.erase(iter++);
iter = dataMp.erase(iter);
}
网友评论