牛客 C++刷题day43
1.+重载符号前面的操作数必须是一个对象。 2.关联容器(如map, set, multimap,multiset),删除当前的iterator,只会使当前的iterator失效,只要在erase时,递增当前iterator即可。 对于序列式容器(如vector,deque),删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。不过erase方法可以返回下一个有效的iterator,cont.erase(iter++)可以修改为cont.erase(iter) list使用了不连续分配的内存,并且它的erase方法也会返回下一个有效的iterator。 3. 下面我以Clang++编译器为例阐述一下C++继承模型的内存布局 对于多继承情况 考虑示例代码 1 2 3 struct Base1 {...}; struct Base2 {...}; struct Derived : Base1, Base2 {...}; 有如下内存布局 首先出现的是派生类Derived类的虚表指针vptr (这里插入一个提醒: 一直以来vptr都被国人翻译为虚函数表指针 但是vtbl英文原文是virtual table并非virtual function table 为什么呢