c++
菠萝菠萝菠萝葡萄
这个作者很懒,什么都没留下…
展开
-
适配器的使用
绑定参数公有继承binary_function参数萃取(设置binary_function的三个参数分别是:仿函数的两个参数和返回值)operator最右方加const修饰原创 2021-05-28 15:40:33 · 168 阅读 · 0 评论 -
使用内建函数对象
可以用仿函数代替原创 2021-05-28 15:25:41 · 151 阅读 · 0 评论 -
什么是谓词
谓词:返回值为bool类型的普通函数或函数对象原创 2021-05-28 15:15:02 · 323 阅读 · 0 评论 -
set容器判断是否插入成功
set<int> sa; bool flag = sa.insert(1).second; bool flag2 = sa.insert(1).second; cout<<"flag="<<flag<<endl; cout<<"flag2="<<flag2<<endl;原创 2021-05-28 14:16:30 · 556 阅读 · 0 评论 -
关于构造函数的注意事项
如果定义有参的普通构造,屏蔽默认构造,但不会屏蔽默认拷贝构造如果定义拷贝构造,屏蔽默认构造,屏蔽默认拷贝构造原创 2021-05-27 15:41:09 · 116 阅读 · 0 评论 -
对组的使用
原创 2021-05-27 10:58:16 · 71 阅读 · 0 评论 -
map容器
class Student{public: string name; int age;public: Student(){} Student(string name, int age) { this->name = name; this->age = age; }};#include<vector>void test02(){ map<int,Student> m;/..原创 2021-05-23 22:37:02 · 559 阅读 · 0 评论 -
关于注释的写法
/*************************************************************************文件名:network.c文件描述:网络通讯函数集创建人:Hao Chen, 2003年2月3日版本号:1.0修改记录:************************************************************************/而对于函数来说,应该也有类似于这样的注释:/*==========原创 2021-05-23 22:24:20 · 55 阅读 · 0 评论 -
deque容器
deque双端动态数组:双开口连续线性与deque的差异:允许使用常数项时间对头端进行元素的插入删除(不管数据量删除插入的耗时不变),没有容量vector 单端动态数组deque的原理:(这好像哈希表的样子)...原创 2021-05-13 17:01:35 · 60 阅读 · 0 评论 -
回调函数的使用
#include <stdio.h>int callBackCompare(int a,int b){ return a<b?0:1;}void selectSort(int *p, int n,int(*pf)(int,int)){ for(int i=0; i<n-1 ;i ++) { for(int j=i+1; j<n; j++) { if(pf(p[i],p[j]))原创 2021-05-06 10:27:24 · 78 阅读 · 0 评论 -
菱形继承的举例
菱形继承产生二义性使用作用域解决????和驼都使用虚继承的方式继承它们的父类虚继承的时候产生一个指针(虚基类指针),导致类的大小要加上一个指针的大小羊驼再继承就有4+4(两个虚基类指针)+data...原创 2021-04-28 17:17:38 · 136 阅读 · 0 评论 -
虚析构
一个带有虚函数的基类,尽量把析构函数写成虚函数否则,在基类指针指向子类的时候,delete 基类指针时不会自动调用子类的析构造成内存泄漏原创 2021-04-27 19:05:49 · 62 阅读 · 0 评论 -
::
当成员函数名和标准函数同名时,::将调用标准函数原创 2021-04-20 17:50:24 · 80 阅读 · 0 评论 -
vector指数申请空间
#include <iostream>#include<vector>#include<deque>using namespace std;void test();void test01();void printDequeInt(deque<int> &d);int main(){ test(); cout << "Hello World!" << endl; return 0;}//原创 2021-04-19 16:34:57 · 302 阅读 · 0 评论 -
关于cin,cout
#include <iostream>#include<iomanip>#include<fstream>//文件操作using namespace std;void test();void test2();void test3();void test4();void test5();class OO{public: enum { DEC = 100, HEX = 001, OCT..原创 2021-04-16 18:40:48 · 69 阅读 · 0 评论 -
逗号表达式
逗号表达式以后一个为准原创 2021-04-16 18:29:13 · 61 阅读 · 0 评论 -
异常的生命周期
#include <iostream>#include<vector>#include<algorithm>using namespace std;//异常的生命周期//由于没有调用异常的析构,说明抛出堆区异常导致内存泄露//除非在捕获后再delete//异常使用严格的类型检查//使用别名来接避免空间浪费class Base{public: virtual void printError(){}};class NullPointe原创 2021-04-16 09:21:29 · 122 阅读 · 0 评论 -
异常的多态
#include <iostream>#include<vector>#include<algorithm>using namespace std;//异常的多态:用基类异常捕获子类异常class Base{public: virtual void printError(){}};class NullPointerex:public Base{public: virtual void printError() overri原创 2021-04-16 09:21:10 · 92 阅读 · 0 评论 -
栈解旋
#include <iostream>#include<vector>#include<algorithm>using namespace std;//栈解旋:进入try后在栈构造的对象都会自动析构,与构造顺序相反class Person{ public: int a;public: Person(int a) { this->a = a; cout<<"有参构造="<原创 2021-04-15 19:09:32 · 116 阅读 · 0 评论 -
迭代器的使用
vector 单端动态数组#include <iostream>#include<vector>#include<algorithm>using namespace std;void printVectorInt(vector<int>& v1){ vector<int>::iterator it = v1.begin(); //对迭代器取类型 代表it的类型 while (it!=v1.end()原创 2021-04-15 18:58:03 · 77 阅读 · 0 评论 -
类模板
#include <iostream>using namespace std;template <class T1,class T2>class Person{public:private: T1 name; T2 age;public: Person(T1 name,T2 age) { this->name = name; this->age = age; } void s原创 2021-04-15 16:12:03 · 101 阅读 · 0 评论 -
函数模板
#include <iostream>using namespace std;//函数模板,类模板 提高算法通用性template <typename T>void mySwap(T& ob1,T& ob2){ ob1 ^= ob2; ob2 ^= ob1; ob1 ^= ob2;}int main(){ int a =5; int b =4; mySwap(a,b); cout<<原创 2021-04-15 15:17:11 · 75 阅读 · 0 评论 -
实现自动delete?
main.cpp#include <iostream>#include"person.h"using namespace std;int main(){ Person* p = new Person(100); p->printPerson(); smartPointer sp(new Person(200)); sp.mp->printPerson(); sp->printPerson(); //delete p;原创 2021-04-15 12:07:30 · 138 阅读 · 0 评论 -
运算符重载<<
运算符重载用来适应不同的数据类型仅仅是语法的方便,实则是函数如果左边不是自定义对象,只能用全局函数完成运算符重载举例:main.cpp#include <iostream>#include"person.h"using namespace std;int main(){ Person ob1("lucy",100,40); Person ob2("dd",23,55); cout<<ob1<<ob2; cout <原创 2021-04-15 11:33:23 · 401 阅读 · 0 评论 -
assert的使用
参考:https://www.runoob.com/w3cnote/c-assert.htmlassert是一个宏它在 "assert.h"中作用:检验数据是否符合预期同时检验多个条件无法判断是那个条件出错使用案例int resetBufferSize(int nNewSize) { //功能:改变缓冲区大小, //参数:nNewSize 缓冲区新长度 //返回值:缓冲区当前长度 //说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区 assert(nNewSi原创 2021-03-08 20:20:45 · 221 阅读 · 0 评论 -
动态申请堆区空间
正确void test(int n){ malloc(n);}错误void test2(int n){ new int[n][n];}```正确void test2(int n){new int[n][5];}也就是说必须指定列数原创 2021-04-12 12:25:51 · 131 阅读 · 0 评论 -
string的字符串比较
http://c.biancheng.net/view/1447.html原创 2021-04-09 17:20:33 · 72 阅读 · 0 评论 -
类模板举例
#include <iostream>#include<string>using namespace std;//类模板template<class T1, class T2>class Person{private: T1 name; T2 age;public: Person(T1 name, T2 age) { this->name = name; this->age = a原创 2021-04-08 18:09:31 · 103 阅读 · 0 评论 -
c++创建线程的6种方法
// C++_THREAD.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <thread>#include <windows.h>using namespace std;#define DEBUG#ifdef DEBUGvoid print(){ Sleep(5000); cout << "子线程运行。。。" << endl;原创 2021-04-08 17:58:12 · 19956 阅读 · 3 评论 -
纯虚函数
纯虚函数:virtual 修饰 没有函数体 直接=0virtual void speak(void)=0;原创 2021-03-13 11:08:38 · 88 阅读 · 0 评论 -
虚析构、纯虚析构的作用?
基类指针指向派生类,通过基类指针删除派生类对象#include <iostream>using namespace std;class Base{public: Base() { cout<<"Base无参构造"<<endl; } //虚析构函数 virtual ~Base() { cout<<"Base析构函数"<<endl; }};clas原创 2021-03-13 11:08:17 · 185 阅读 · 0 评论 -
c++的动态编译机制?
编译器发现有虚函数时,创建一张虚函数表,把虚函数的入口地址放入表中。同时创建一个指针,指向虚函数表。通过这个指针实现动态调用原创 2021-03-13 10:24:16 · 456 阅读 · 0 评论 -
静态多态和动态多态的区别
静态多态: 编译阶段确定函数地址 (如:函数重载)动态多态:运行过程中确定函数地址 (子类重写父类虚函数)原创 2021-03-13 10:12:46 · 602 阅读 · 0 评论 -
哪些函数无法继承
构造析构和operator=不能继承原创 2021-03-13 10:09:44 · 242 阅读 · 0 评论 -
继承中同名成员的处理方法
照常继承就近原则通过作用域运算符进行区分原创 2021-03-13 10:05:49 · 109 阅读 · 0 评论 -
谈谈继承中的构造与析构
先调用父类构造,父类构造调用完毕再调用子类构造,析构过程相反子类再调用父类有参构造时需要使用参数初始化列表显式调用父类的构造函数原创 2021-03-13 10:02:55 · 94 阅读 · 0 评论 -
继承
c++的重要特征就是代码重用,通过继承机制利用已有的数据类型定义新的数据类型。派生成员有两部分:继承的,自己增加的继承的表现共性,自己的表现个性原创 2021-03-13 09:38:58 · 68 阅读 · 0 评论 -
为什么要用拷贝构造?
参考:https://www.cnblogs.com/123wh/p/14383142.html浅拷贝:对存在指针成员的结构体直接赋值,导致结构体中的指针变量指向同一地址,在释放时重复释放同一段空间(段错误)深拷贝:为新结构体变量的成员指针,分配独立的空间补充:free只能free堆区空间,否则段错误 1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct stu 4 { 5 char* name;原创 2021-03-08 20:37:05 · 176 阅读 · 0 评论 -
关于函数重载和默认参数
考虑函数原型void test (int a,int b = 7,char c=’ *’),下面函数调用中,属于不合法调用的是( )A. test(5); B.test(5,8); C. test(6,’#’) D.test(0,0,‘ *’)虽然上题选c但vs不报错缺省参数和重载不能同时出现...原创 2021-03-01 20:48:48 · 178 阅读 · 0 评论 -
c++的引用
1.什么是引用?引用是对变量取别名,操作别名等价于操作变量2.有什么用途?用于函数传参3.使用#include <iostream>using namespace std;int main(int argc, char *argv[]){ int data = 100; int& quote = data; cout<<"data ="<<data<<",quote="<<quote<&l原创 2021-02-23 10:25:06 · 188 阅读 · 0 评论