C++
文章平均质量分 73
不想飞的猫
不与生人论长短,不以人生论短长
展开
-
C++指针与引用的区别
指针和引用的区别①指针是一个变量,存储一个成员的地址;引用是一个常量(指针常量),相当于一个成员的别名②指针声明和定义可以分开;引用声明时必须初始化int* a;//指针声明a=new int(1);//指针定义int& b=a;//引用初始化③指针可以改变指向;引用一旦初始化就不可改变④指针可以指向空值;引用不可为空⑤在32位编译器上,指针的sizeof为4个字节;引用的sizeof为所指向成员的大小(引用本质是指针,本身占四个字节)⑥指针可以有多级;引用只有一级⑦在传参时,原创 2021-11-29 21:58:37 · 894 阅读 · 0 评论 -
C++中输入/输出运算符为什么一般不作为类的成员函数重载
(我被灌输的第一印象是输入输出运算符不能重载成成员函数,后来发现不是不能,而是习惯上的选择。)众所周知,作为类的非静态成员函数,第一个参数隐藏为this指针,这样才能被对象调通过 obj.fun() 的方式实现调用。若将输入/输出运算符重载为成员函数:#include<iostream>using namespace std;class Data{private: int a; int b;public: Data() { a = 0; b = 0; cout <<原创 2021-11-29 20:38:34 · 1574 阅读 · 1 评论 -
在C++中如何对自定义类型做hash操作
概述哈希函数(hash function)的目的时根据给定对象算出一个哈希码(hash code),使得对象经过hash code映射之后能够乱且随机地被放置在哈希表(hashtable)中,从而尽量避免发生哈希碰撞。C++标准库中提供地hash函数版本如下(使用偏特化,对于数值型地数据hash函数得到地hash code就是原值,对于字符串则提供了专门地hash表达式):template<class key> struct hash{};//泛化//偏特化template<&g原创 2021-11-23 17:23:24 · 7220 阅读 · 9 评论 -
C++多态详解
C++多态详解引言虚函数与多态虚函数多态虚析构纯虚函数和抽象类总结引言多态是面向程序设计语言中数据封装和继承之外的第三个基本特征。多态性(polymorphism)提供接口与具体实现之间的另一层隔离,从而将“what”和“how”分离开来。多态性改善了代码的可读性和组织性,同时也使得创建的代码就有具有展性。C++支持编译时多态(静态多态) 和 运行时多态(动态多态),运算符重载和函数重载是编译时多态(运算符重载本质上也是函数重载,要求函数名相同,但形参列表中参数个数、类型、类型顺序三者至少有一个不同,原创 2021-05-30 08:51:19 · 1092 阅读 · 0 评论 -
C++STL map/multimap容器
1、map/multimap容器简介map 的特性是所有的元素都会根据元素的键值自动排序。map所有元素都是pair(对组),同时拥有实值和键值,pair的第一元素被认为是键值。不能通过map的迭代器改变map的键值,因为map的键值关系到map元素的排序规则,任意改变map的键值将会破坏map组织。如果想修改map的实值是可以的。map和list拥有相同的某些性质,在对容器进行插入或删除操作时,除了删除元素外其他所有元素的迭代器依然有效。multimap和map的操作类似,唯一区别是multim原创 2021-05-26 23:00:47 · 374 阅读 · 0 评论 -
C++STL set/multiset容器
C++STL set/multiset容器1、set/multiset容器简介2、API3、使用insert、erase对组(pair)lower_bound、upper_bound更改set排序规则1、set/multiset容器简介set元素的特性是所有元素都会根据元素的键值自动排序。set的元素不像map可以同时拥有实值和键值,set的元素既是实值也是键值。set不允许两个元素有相同的键值。不能通过set的迭代器改变set元素的值,因为set的元素值就是键值,关系到set元素的排序规则,如果任意原创 2021-05-25 22:59:25 · 353 阅读 · 0 评论