C++
三三三三三三外
这个作者很懒,什么都没留下…
展开
-
variadic templates
可变参数模版, 使得函数可以接收任意类型, 任意数量的参数一定需要一个无参函数结束递归, 并且要放在前面, 编译器是从前往后依次找寻第一个可以调用的函数.每次传递的参数被分为一个和一包, 一包继续递归传递下去使用sizeof…(args) 获得一包里参数的个数void print() {}template<typename T, typename... Types>void print(const T& arg, const Types&... args) .原创 2020-11-08 14:30:21 · 250 阅读 · 0 评论 -
specialization
文章目录full specializationpartial specialization个数范围full specialization泛化 : 编写的类或者函数不指定类型, 使用时再临时指定, 使得编写的一份代码可以适用于各种情况特化 : 在泛化的基础上, 增加一些特殊的地方. 比如针对某些特殊的类型, 专门进行一份代码编写.泛化版本 和 特化版本 是要同时存在的当遇到hash<long>() 编译器发现泛化版本可以, 特化版本也有对应的, 当然会选择特化版本.parti原创 2020-11-08 13:58:52 · 450 阅读 · 0 评论 -
member template
文章目录member template 常被用于拷贝构造函数中一般情况都是用 一个类的对象A 去拷贝构造 该类的对象B但是由于up-cast的存在, 子类对象是可以转换为父类对象的因此也需要一个类的子类A的对象 (子类B的对象...)去拷贝构造 该类的对象也就需要member template的存在...原创 2020-11-08 13:28:47 · 253 阅读 · 0 评论 -
function-like classes (ing)
文章目录让一个类的使用像一个函数, ()是function call operator, 只要一个类可以调用(), 就说它像一个函数. 也就是仿函数重载operator()操作符原创 2020-11-08 13:03:19 · 90 阅读 · 0 评论 -
pointer-like classes
文章目录关于智能指针关于迭代器将一个类设计成像一个指针, 可以给传统的指针增加一些额外的功能.指针支持的操作符, 这个类应该都支持关于智能指针箭头符号作用在左值后, 仍然会作用在新的返回值上*sp => *my_ptr<Foo>::pxsp-> => my_ptr<Foo>::px->template<class T>class my_ptr {public: my_ptr(T* p) : px(p) {} T&原创 2020-11-07 20:06:07 · 111 阅读 · 0 评论 -
conversion function
文章目录conversion function (自定义类型转换为其余类型)non-explicit-one-argument constructor (基本类型转换为自定义类型)conversion function v.s. non-explicit-one-argument constructorexplicit-one-argument constructorconversion function (自定义类型转换为其余类型)比如自定义了一个Fraction分数类, 它应该可以被转换为doub原创 2020-11-07 18:57:59 · 223 阅读 · 0 评论 -
Object oriented programming (OOP)
文章目录Composition (复合) has-a构造和析构Delegation (委托) Composition by referenceInheritance (继承) is-a构造和析构virtual functionsTemplate MethodInheritance + CompositionComposition (复合) has-a一个类中包含另一个类对象的数据成员deque已经完成了所有功能, queue只是调用deque中所需要的功能, 来实现queue的特性adapter原创 2020-11-07 13:34:53 · 245 阅读 · 0 评论 -
new、delete、内存分配 的底层原理
文章目录newdelete实际分配内存的大小array new 搭配 array deletenew先调用operator new函数为对象分配空间然后调用构造函数, 初始化对象 (对象也可能会有申请堆空间)delete先调用对象的析构函数, 是把对象里可能申请的堆空间进行释放然后再调用operator delete函数释放为对象分配的空间.实际分配内存的大小调试模式会有额外的灰色模块非调试模式没有额外灰色模块上下cookies(红色部分)是必要的, 他用来记录一些信息便于原创 2020-11-06 16:28:20 · 662 阅读 · 0 评论 -
自定义实现String类
文章目录// mystring.h#ifndef __MYSTRING__#define __MYSTRING__using std::ostream;class String {public: // 需要调用默认构造函数的时候会调用下面这一个 // 传统的c字符串 String(const char* cstr = 0); // 拷贝构造 String(const String&); // 拷贝赋值 String& o原创 2020-11-05 19:52:31 · 203 阅读 · 0 评论 -
类相关 [持续补充]
文章目录类的设计规范头文件防卫式声明类的两种经典分类构造函数构造函数的初始化列表 & 函数体赋值无参构造函数 & 带有默认参数的构造函数私有化构造函数 (Singleton)成员函数隐藏的this指针类内实现 & 类外实现常量成员函数友元同一个类的所有实例之间互为友元操作符重载类的设计规范数据一定放在private中构造函数使用初始化列表参数传递 和 返回值 尽量使用引用成员函数需要加const的一定不能少头文件中的防卫式宏定义头文件防卫式声明#ifndef __原创 2020-11-07 13:35:43 · 209 阅读 · 0 评论 -
自定义实现Complex类
// complex.h// 防卫式的宏定义#ifndef __COMPLEX__#define __COMPLEX__/* forward declarations */using std::ostream;class Complex;Complex&__doapl(Complex*, const Complex&);/* class declarations */class Complex{public: Complex(double r = 0,原创 2020-11-05 17:59:52 · 481 阅读 · 0 评论 -
运算符重载
运算符重载实现自定义类型的运算对于内置数据类型的表达式的运算是不可以改变的 (1+1不能改成3)四个运算符不能重载, 八个点 ::, ., .*, :?加号运算符重载成员函数重载加号运算符class Person{public: Person operator+(Person& p) { Person temp; temp.m_A = this->m_A + p.m_A; temp.m_B = this->m_B + p.m_B; return原创 2020-09-19 07:42:11 · 84 阅读 · 0 评论 -
C++11的智能指针
文章目录Smart Pointersunique_ptrunique_ptr 构造examplesLife Cycleshared_ptrshared_ptr 构造examplesLife Cycleweak_ptrexamples总结使用智能指针写一个链表智能指针原理实现Smart Pointers为了解决**内存泄漏(memory leak)**问题, C++11引入的新机制.使用完后, 这些指针会自动释放, 不需要程序员操作.一共有三个智能指针std::unique_ptr - s原创 2020-09-04 20:05:32 · 146 阅读 · 0 评论 -
STL : set / map
文章目录set / multiset构造 和 赋值set大小和交换set插入和删除set查好和统计set 和 multiset 的区别pair对组的创建set容器排序内置数据类型自定义数据类型map / multimapmap容器的构造和赋值map的大小和交换map插入和删除查找和统计map排序内置数据类型自定义数据类型STL案例--员工分组set / multiset所有元素在插入式就会自动排好序set 和 multiset都是关联式容器, 底层是二叉树实现set 和 multiset的区别原创 2020-09-03 12:38:15 · 426 阅读 · 0 评论 -
C++基础知识点复习
???父类的构造函数可以背子类重载吗???内部类表达式extern内联函数指针数组 和 数组指针动态联编类中的成员函数和成员变量分开存储IMPL 和 RAII一个C源程序由一个或多个函数组成, 函数是基本组成单位, 其中main函数是必须的,两种注释 /**/, //函数调用时, 可以是常量, 变量, 表达式, 函数逗号表达式 : 使用逗号将几个表达式放在一起, 从前往后依次计算, 最后输出结果是最后一个表达式的值.标识符 : 字母, 数字, 下划线,.原创 2020-09-02 21:13:22 · 88 阅读 · 0 评论 -
stack, queue, list
文章目录stack常用接口queue常用接口listlist构造函数list赋值和交换list 大小操作list插入删除list数据存取list反转和排序list 排序案例stackstack是一个先进后出(First In Last Out, FIFO)的数据结构, 只有一个出口栈中只有栈顶元素才可以被外界使用, 因此栈不允许有遍历操作遍历是一个非质变算法, 执行期间, 区间内容不能改变.常用接口构造, 赋值, 存取, 大小#include <iostream>原创 2020-08-29 19:34:56 · 356 阅读 · 0 评论 -
评委打分案例(C++实现)
文章目录案例描述实现步骤代码实现案例描述有五名选手, ABCDE, 10个评委分别对每一名选手打分, 去除最高分和最低分后取平均分实现步骤把五名选手放入一个vector容器遍历vector容器, 取出每一名选手, 执行for循环, 把十个得分放入deque容器中sort算法对deque中分数进行排序, 去除最高分和最低分deque遍历一遍, 类加分数获取平均分代码实现Person.hpp//// Person.hpp// leetcode//// Created原创 2020-08-29 16:40:50 · 1355 阅读 · 0 评论 -
STL, string, vector,deque
文章目录STL的诞生STL的基本概念STL六大组件容器算法迭代器vector容器存放内置数据类型vector容器存放自定义数据类型容器嵌套容器string构造函数string 赋值操作string字符串拼接字符串查找和替换字符串比较字符串存取string插入和删除string子串vector容器vector构造函数vector 赋值操作vector的容量和大小vector插入和删除vector数据存取vector 互换容器vector预留空间deque 容器内部工作原理deque构造函数deque赋值操作d原创 2020-08-29 16:02:04 · 636 阅读 · 0 评论 -
C++ template笔记
文章目录模板函数模板函数模板使用注意事项选择排序 函数模板实现普通函数 和 函数模板的区别普通函数和函数模板的调用规则模板的局限性类模板类模板 与 函数模板 的区别类模板中成员函数创建时机类模板对象做函数参数类模板与继承类模板成员函数的类外实现类模板分文件编写类模板与友元模板模板一个框架, 可以通用, 但不能单独使用, 也不是万能的C++中除了面向对象编程思想之外, 还有另一种思想 泛型编程, 主要利用的就是模板技术C++提供了两种模板技术, 函数模板 和 类模板目的提高代码复用性原创 2020-08-28 23:56:32 · 702 阅读 · 0 评论