
C++
C++知识学习、分类、总结
°﹏Struggle丶岚
以凡人之躯,比肩神明。
展开
-
(10)函数模板和类模板
函数模板01 变量交换函数模板假设我们设计一个交换两个整型变量的值的函数,代码如下:// 交换两个整型变量的值的Swap函数void Swap(int &x,int &y){int temp=x;x=y;y=temp;}如果是浮点类型的变量的值交换,则替换 int 类型为 double 即可,代码如下:// 交换两个double变量的值的Swap函数void Swap(double &x,double &y){double temp=x;x=y转载 2021-03-18 01:52:01 · 201 阅读 · 0 评论 -
(9)指针函数和函数指针
指针的声明:指针其实是一个变量,指针的声明方式与一般的变量声明类似,如下:int *p; // 声明一个 int类型的指针,该指针指向一个int类型的对象char *p; // 声明一个 char类型的指针,该指针指向一个 char类型的对象int *arr[10]; // 声明一个指针数组, 该数组有10个元素,其中每个元素都是一个指向int 类型对象的指针int (*arr)[10]; // 声明一个数组指针,该指针指向一个 in转载 2021-03-17 22:23:41 · 142 阅读 · 0 评论 -
(8)多级指针
首先看下生活中的快递柜: 这里的格子就是内存单元,编号就是地址,格子里放的东西就对应存储在内存中的内容。 假设我把一本书,放在了 03 号格子,然后把 03 这个编号告诉你,你就可以根据 03 去取到里面的书。那如果我把书放在 05 号格子,然后在 03 号格子只放一个小纸条,上面写着:「书放在 05 号」。 你会怎么做?当然是打开 03 号格子,然后取出了纸条,根据上面内容去打开 05 号格子得到书。这里的 03 号格子就叫指针,因为它里面放的是指向其它格子的小纸条(地址)而不是具体的书。明白转载 2021-03-16 01:32:23 · 184 阅读 · 0 评论 -
(7)32/64位机器中,各数据类型所占位数的区别
在32位机器和64机器中int类型都占用4个字节。编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。下面列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数: C类型 .转载 2021-03-15 16:13:39 · 1160 阅读 · 0 评论 -
(6)虚函数、纯虚函数和抽象类
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:class A { public: virtual void foo() { cout<<"A::foo() is转载 2021-03-15 15:55:06 · 383 阅读 · 0 评论 -
stl::(14)常用拷贝和替换算法
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <iterator>#include <functional>using namespace std;// copy算法 将容器被指定范围的元素拷贝到另一个容器中// replace算法 将旧元素替换为新元素// replace_if算法 按条件替原创 2021-03-07 00:21:37 · 107 阅读 · 0 评论 -
stl::(13)常用排序算法
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <functional>#include <ctime>using namespace std;// merge算法 容器元素合并,并储存到另一个容器 这两个容器必须是有序的void sortMerge(){ vector<int> v原创 2021-03-07 00:21:26 · 104 阅读 · 0 评论 -
stl(12)常用算法生成算法
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <functional>#include <numeric> // 支持的头文件using namespace std;// accumulate算法 计算容器元素累计总和void testAccumulate(){ vector<int原创 2021-03-07 00:21:15 · 172 阅读 · 0 评论 -
stl::(11)常用查找算法
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <functional>using namespace std;// find算法查找元素 返回查找元素位置void find1(){ vector<int >v; for (int i = 0; i < 10; i++) { v.pus原创 2021-03-07 00:21:05 · 80 阅读 · 0 评论 -
stl::(10)常用遍历算法
#include <iostream>#include <vector>#include <algorithm>#include <functional>using namespace std;void print(int v){ cout << v << "-";}// 函数对象class print2 {public: void operator()(int v) { cout <<原创 2021-03-07 00:20:54 · 107 阅读 · 0 评论 -
stl::(9)容器使用总结
vector deque list set multiset map multimap 经典内存结构 单端数组 双端数组 双向链表 二叉树 二叉树 二叉树 二叉树 可随机存取 是 是 否 否 否 对key而言:不是 ...原创 2021-03-05 00:38:55 · 197 阅读 · 1 评论 -
stl::(6)list容器API
list 构造函数list<T> listT; // list采用模板类实现,默认构造list(beg, end); // 构造函数将[beg ,end)区间元素拷贝给本身list(n, elem); // 构造函数将n个elem拷贝给本身list(const list &lst); // 拷贝构造函数list 元素插入和删除操作push_back(elem); // 容器尾部添加一个元素pop_back();原创 2021-03-04 22:21:49 · 165 阅读 · 1 评论 -
stl::(8)set容器API
set根据元素键值自动被排序,迭代器不能修改键值,键值唯一不重复。set 构造函数set<T> st; // set默认构造函数mulitset<T> mst; // mulitset默认构造函数set(const set &st); // set 拷贝构造函数set 赋值操作set& operator=(const set &st); // 重载=swap(st); .原创 2021-03-04 22:21:25 · 248 阅读 · 1 评论 -
stl::(7)map容器API
map 构造函数map<T1,T2>mapT; // 默认构造函数map(const map &mp); // 拷贝构造函数map 赋值操作map& operator=(const map &mp); // 重载=swap(mp); // 交换两个集合容器map 大小操作size(); // 返回容器中元素的数目empty(); // 判断容器是否为空map 插入数据元素操作原创 2021-03-04 22:21:13 · 151 阅读 · 1 评论 -
stl::(5)queue容器API
queue 只有顶端元素,才有机会被外界访问,queue不提供遍历功能,也不提供迭代器。queue 构造函数queue<T> queT; // queue采用模板实现,默认构造queue(const queue& que); // 拷贝构造函数queue 存取、插入、删除操作push(elem); // 往队尾添加元素pop(); // 从队头移除第一个元素back(); // 返回最后一个元素front();.原创 2021-03-04 22:20:54 · 92 阅读 · 1 评论 -
stl::(4)stack容器API
stack 只有顶端元素,才有机会被外界访问,stack不提供遍历功能,也不提供迭代器。stack 构造函数stack<T> stkT; // stack采用模板类实现,默认构造stack(const stack &stk); // 拷贝构造函数stack 赋值操作stack& operator=(const stack &stk); // 重载=stack 数据存取push(elem); .原创 2021-03-04 22:20:36 · 129 阅读 · 1 评论 -
stl::(3)deque容器API
deque 构造函数deque<T> deqT; // 默认构造deque(beg,end); // 构造函数将[beg, end)区间元素拷贝给本身deque(n, elem); // 构造函数将n个elem拷贝给本身deque(const deque &deq); // 拷贝构造函数deque 赋值操作assign(beg, end); // 将(beg ,end) 区间的数据拷贝给本身assign(n, elem); //原创 2021-03-04 22:20:14 · 105 阅读 · 1 评论 -
stl::(2)vector容器API
vector 构造函数vector<T> v; // 采用模板实现类实现,默认构造函数vector(v.begin(), v.end); // 将v[begin(),end())区间的元数拷贝给本身vector(n, elen); // 构造函数将n个elem拷贝给本身vector(const vector &vec); // 拷贝构造函数// 例子,第二个函数可以这样做。。。int arr[]={2,3,4原创 2021-03-04 22:19:46 · 85 阅读 · 1 评论 -
stl::(1)string容器API
string 构造函数string(); // 创建一个空的字符串string(const string& str); // 使用一个string对象初始化另一个string对象string(const char* str); // 使用字符串str初始化string(int n,char c); // 使用n个字符串c初始化string 基本赋值操作string& operator=(原创 2021-03-04 22:19:25 · 89 阅读 · 1 评论 -
(5)数组指针和指针数组
数组指针(也称行指针)数组指针, 从字面意思来看就是"指向数组的指针".定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]转载 2021-03-03 00:49:05 · 121 阅读 · 0 评论 -
(3)友元函数和友元类
一、友元(friend)概念:通过友元,打破了类的封装性,可以访问类内的所有成员分类:友元函数、友元类二、友元函数概念:友元函数是一个普通函数,不属于类,但需要在类内表明友元关系友元函数可访问类内所有成员,但类不可以访问友元函数内部数据格式友元函数可以在类内声明时,需要加上关键字friend友元函数可以在类外声明,类外定义。需要加上关键字friendclass Cperson{private:int age;public:friend void setPerso原创 2021-03-02 20:21:21 · 305 阅读 · 0 评论 -
(4)深拷贝和浅拷贝
浅拷贝:统一类型对象之间可以赋值,使用两个对象的成员变量的值相同,两个对象仍是独立的两个对象。一般情况下,浅拷贝没有任何问题,但是当类中有指针,并且指针指向动态分配的内存 空间,析构函数做了动态内存释放的处理,会导致内存问题#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class Person{public: Person() {} Person(char *name, i原创 2021-03-02 20:21:03 · 81 阅读 · 0 评论 -
(2)const和static
static关键字的作用:c/c++共有: 1):修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见。 2):修饰局部变量时,表明该变量的值不会因为函数终止而丢失。 3):修饰函数时,表明该函数只在同一文件中调用。c++独有: 4):修饰类的数据成员,表明对该类所有对象这个数据成员都只有一个实例。即该实例归 所有对象共有。 5):用sta原创 2021-03-02 20:20:50 · 527 阅读 · 1 评论 -
(1)指针和引用的区别
性质上的区别指针本身是一个变量,存储的是地址,而声明的类型名只是解释说明指针所指的位置应该怎么解读。引用作C++的产物,底层实现其实是一个指针,只是实现出来看起来像别名(更像是一种指针常量,并且像重载了一些操作符的感觉,例如解引用(*)),这造成了一些不同。使用上的区别:引用必须要初始化且不能是NULL,而指针可以是NULL。且指针的值可以改变,引用不能改变(更像是const,常量指针的概念)有const指针,但没有const引用指针可以有多级(** p),引用只有一级"sizeof引用原创 2021-03-02 20:20:35 · 89 阅读 · 0 评论