1 erase函数有没有重新分配内存,释放原有数组空间?
2 v.erase( remove( v.begin(), v.end(), 0) , v.end() )
请问这个有没有重新分配内存?为何我这教程上说,即使用先前的迭代器也不会出现访问到不存在元素的错误(这意思就是说,没有重新分配内存?)
3 教程里还说,为了实现删除元素后容器自动缩小,每次erase后,向量要重新分配内存,并复制所有元素。
这极大的影响性能。因为标准库把释放内存的选择交给了程序员,让程序员选择放还是不放。你可以使用
v.swap(vector<T>(v)) 来释放多余的内存。
对于第3点,有疑问:
1、erase既然重新分配了,难道他没有自动释放原来的空间?如果自动释放了,那么从何而来的让程序员决定是否释放?
2、swap是交换,跟释放多余的空间,在这里扯上什么关系?
蓝山帝景
相关分类