C++
SAMCYC
这个作者很懒,什么都没留下…
展开
-
C++ 重载()符号
作为运算符重载 话不多说,代码最直观 #include <iostream> #include <string> using namespace std; //定义函数对象类 class cmp { public: //重载 () 运算符 bool operator ()(const string &a,const string &b) { //按照字符串的长度,做升序排序(即存储的字符串从短到长) return (a原创 2020-08-10 23:54:10 · 2600 阅读 · 0 评论 -
C++多态相关
虚函数表 当通过指针访问类的成员函数时: 如果该函数是非虚函数,那么编译器会根据指针的类型找到该函数;也就是说,指针是哪个类的类型就调用哪个类的函数。 如果该函数是虚函数,并且派生类有同名的函数遮蔽它,那么编译器会根据指针的指向找到该函数;也就是说,指针指向的对象属于哪个类就调用哪个类的函数。这就是多态。 编译器之所以能通过指针指向的对象找到虚函数,是因为在创建对象时额外地增加了虚函数表。 如果一个类包含了虚函数,那么在创建该类的对象时就会额外地增加一个数组,数组中的每一个元素都是虚函数的入口地址。不过数组转载 2020-07-24 22:11:09 · 156 阅读 · 0 评论 -
浅析C++中迭代器(iterator)的失效情况
array/vector/deque 这三种容器的内存空间连续,删除某一元素会导致其后所有元素前移。 如图所示,删除某一元素后,后面的元素全都前移了一位。此时it3指向end位置。 依照C++规定,包括it0在内的其后迭代器全部“失效”(尽管他们有些指向的是有效位置),对这些迭代器进行任何操作(解引用、调用符号重载函数等)都会抛出错误。 解决方法:erase函数将返回下一个有效位置的迭代器 例如: //删除2之前的所有元素 vector<int> vec{ 0,1,2,3 }; for (a原创 2020-06-07 13:12:48 · 481 阅读 · 0 评论