二十三.STL常用算法

23 STL常用算法

STL 提供了大量的算法,主要用于容器中的数据操作,例如查找、排序、拷贝、替换、算术生成和集合运算等。算法需要包含头文件 #include <algorithm>,算术生成算法需要 #include <numeric>,函数对象需要 #include <functional>。

注意:大多数算法都接受一对迭代器区间 [beg, end),返回迭代器时如果没找到目标,一般返回 end() 或目标区间的结束位置。

23.1 常用遍历算法

23.1.1 for_each

作用:遍历容器,把容器中的数据逐个传递给函数或函数对象处理。

查看更多

二十.STL初识

20 STL初识

20.1 STL 的诞生

  • 长久以来,软件界一直希望建立一种可重复利用的东西
  • C++ 的面向对象和泛型编程思想,目的就是复用性的提升
  • 大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作
  • 为了建立数据结构和算法的一套标准,诞生了 STL
查看更多

十九.模板

19 模板

模板是 C++ 中泛型编程的基础,它允许我们将类型作为参数,做到「一次编写,多处复用」。模板分为函数模板和类模板两种形式。

19.1 模板的基本语法

作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用虚拟的类型来表示。

语法:

1
2
template<typename T>
函数声明或定义

查看更多

十八.文件操作

18 文件操作

作用:程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。通过文件可以将数据持久化。

C++ 中对文件操作需要包含头文件 #include <fstream>。

文件类型分为两种:

  • 文本文件:文件以文本的 ASCII 码形式存储在计算机中
查看更多

十七.多态

17 多态

多态是 C++ 面向对象三大特性之一,它让同一接口可以表现出多种不同的形态,底层原理是虚函数。多态分两类:

  • 静态多态:函数重载和运算符重载,属于编译阶段就确定的绑定,又称编译时多态(早绑定)
  • 动态多态:派生类和虚函数实现,属于运行阶段才确定的绑定,又称运行时多态(晚绑定)

查看更多

十六.继承

16 继承

继承是面向对象三大特性之一。有些类与类之间存在特殊的关系,例如:动物与猫、狗之间。当定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这时就可以利用继承的技术,减少重复代码。

16.1 继承的基本语法

语法:class 子类 : 继承方式 父类

子类也称为派生类,父类也称为基类。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
using namespace std;
#include <string>

//公共页面
class BasePage
{
public:

void header()
{
cout << "首页、公开课、登录、注册...(公共头部)" << endl;
}

void footer()
{
cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
}

void left()
{
cout << "Java、Python、C++...(公共分类列表)" << endl;
}
};

//Java页面
class Java : public BasePage
{
public:

void content()
{
cout << "Java学科视频" << endl;
}
};

//Python页面
class Python : public BasePage
{
public:

void content()
{
cout << "Python学科视频" << endl;
}
};

//C++页面
class CPP : public BasePage
{
public:

void content()
{
cout << "C++学科视频" << endl;
}
};

void test01()
{
cout << "Java下载视频页面如下: " << endl;
Java ja;
ja.header();
ja.footer();
ja.left();
ja.content();

cout << "--------------------" << endl;
cout << "Python下载视频页面如下: " << endl;
Python py;
py.header();
py.footer();
py.left();
py.content();

cout << "--------------------" << endl;
cout << "C++下载视频页面如下: " << endl;
CPP cpp;
cpp.header();
cpp.footer();
cpp.left();
cpp.content();
}

int main() {

test01();

system("pause");

return 0;
}

查看更多

十五.运算符重载

15 运算符重载

运算符重载:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

运算符重载的本质是函数,函数名是 operator 加运算符符号。

15.1 加号运算符重载

作用:实现两个自定义数据类型相加的运算。

示例:成员函数实现 + 号运算符重载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
using namespace std;

class Person
{
public:

Person() {};

Person(int a, int b)
{
this->m_A = a;
this->m_B = b;
}

//成员函数实现 + 号运算符重载
Person operator+(const Person& p)
{
Person temp;
temp.m_A = this->m_A + p.m_A;
temp.m_B = this->m_B + p.m_B;
return temp;
}

int m_A;
int m_B;
};

void test01()
{
Person p1(10, 10);
Person p2(20, 20);

//成员函数方式
Person p3 = p1 + p2; //相当于 p1.operator+(p2)
cout << "p3.m_A = " << p3.m_A << " p3.m_B = " << p3.m_B << endl;
}

int main() {

test01();

system("pause");

return 0;
}

查看更多

十四.友元

14 友元

作用:在程序里,有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。友元的目的就是让一个函数或者类 访问另一个类中的私有成员,友元的关键字为 ==friend==。

友元的三种实现:

  • 全局函数做友元
  • 类做友元
查看更多