失效迭代器(Invalidating Iterators)当一个容器变化时,指向该容器中元素的迭代器可能失效。这使得在迭代器变化期间改变容器容易出现问题。在这方面,不同的容器提供不同的保障:vectors: 引起内存重新分配的插入运算使所有迭代器失效,插入也使得插入位置及其后位置的迭代器失效,删除运算使得删除位置及其后位置的迭代器失效.list/map: 插入不会使得任何迭代器失效;删除运算使指向删除位置的迭代器失效,但是不会失效其他迭代器.
一. 在c中分为这几个存储区
1.栈 - 由编译器自动分配释放
2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放
4.另外还有一个专门放常量的地方。- 程序结束释放
...
转自:http://pcedu.pconline.com.cn/empolder/gj/c/0412/514980_3.html mutable关键字 关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员 我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变, 对像的状态也会随之发生变化! 如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是 该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数中对类的数据成员 进行赋值.这个时候就需要用到mutable关键字了 例如: class...
简而言之:explicit修饰的构造函数不能担任转换函数。首先这个关键字只能用在类构造函数。它的作用是不能进行隐式转换。当构造函数参数超过两个时自动取消隐式转换。但是另外一种情况例外:其中只有一个必须输入的参数,其余的为有默认值的参数。此时隐式转换又开启了。以下是 《ANSI/ISO C++ Professional Programmer's Handbook 》是这样说的explicit ConstructorsA constructor that takes a single argument is, by default, an implicit conversion operat...