• C++核心编程:P18->STL----常用算法(上)


    本系列文章为黑马程序员C++教程学习笔记,前面的系列文章链接如下
    C++核心编程:P1->程序的内存模型
    C++核心编程:P2->引用
    C++核心编程:P3->函数提高
    C++核心编程:P4->类和对象----封装
    C++核心编程:P5->类和对象----对象的初始化和清理
    C++核心编程:P6->类和对象----C++对象模型和this指针
    C++核心编程:P7->类和对象----友元
    C++核心编程:P8->类和对象----运算符重载
    C++核心编程:P9->类和对象----继承
    C++核心编程:P10->类和对象----多态
    C++核心编程:P11->文件操作
    C++核心编程:P12->模板----函数模板
    C++核心编程:P13->模板----类模板
    C++核心编程:P14->STL----STL初识
    C++核心编程:P15->STL----常用容器(上)
    C++核心编程:P16->STL----常用容器(下)
    C++核心编程:P17->STL----函数对象


    概述:

    • 算法主要是由头文件 组成。

    • 是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等

    • 体积很小,只包括几个在序列上面进行简单数学运算的模板函数

    • 定义了一些模板类,用以声明函数对象。


    一、常用遍历算法

    学习目标: 掌握常用的遍历算法
    算法简介:
    for_each //遍历容器
    transform //搬运容器到另一个容器中


    1.1 for_each

    功能描述: 实现遍历容器
    函数原型:for_each(iterator beg, iterator end, _func);
    遍历算法 遍历容器元素
    beg:开始迭代器
    end:结束迭代器
    _func:普通函数或者函数对象(仿函数)


    示例: 测试for_each的用法,我们首先看下for_each的源码。
    在这里插入图片描述
    可以看出for_each使用指定的函数来完成遍历元素操作。

    #include 
    #include 
    #include 
    using namespace std;
    
    //普通函数
    void print01(int val)
    {
    	cout << val << " ";
    }
    
    //仿函数
    class print02
    {
    public:
    	void operator()(int val)
    	{
    		cout << val << " ";
    	}
    };
    
    void test01()
    {
    	vector<int> v;
    	for (int i = 0; i < 10; i++)
    	{
    		v.push_back(i);
    	}
    	for_each(v.begin(), v.end(), print01);
    	cout << endl;
    	for_each(v.begin(), v.end(), print02());
    	cout << endl;
    }
    
    int main()
    {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下
    在这里插入图片描述


    1.2 transform

    功能描述: 搬运容器到另一个容器中
    函数原型:transform(iterator beg1, iterator end1, iterator beg2, _func);
    beg1:源容器开始迭代器
    end1:源容器结束迭代器
    beg2:目标容器开始迭代器
    _func:函数或者函数对象,在搬运过程中对数据做的操作。


    示例: 测试transform的功能

    #include 
    #include 
    #include 
    using namespace std;
    
    //普通函数,将元素搬运过去并+100
    int Transform(int val)
    {
    	return val + 100;
    }
    
    //仿函数
    class print02
    {
    public:
    	void operator()(int val)
    	{
    		cout << val << " ";
    	}
    };
    
    void test01()
    {
    	vector<int> v;
    	for (int i = 0; i < 10; i++)
    	{
    		v.push_back(i);
    	}
    	for_each(v.begin(), v.end(), print02());
    	cout << endl;
    
    	vector<int> v2;
    	v2.resize(v.size()); //目标容器必须先开辟空间
    	transform(v.begin(), v.end(), v2.begin(), Transform);
    	for_each(v2.begin(), v2.end(), print02());
    	cout << endl;
    }
    
    int main()
    {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述


    二、常用查找算法

    学习目标: 掌握常用的查找算法
    算法简介:
    find //查找元素
    find_if //按条件查找元素
    adjacent_find //查找相邻重复元素
    binary_search //二分查找法
    count //统计元素个数
    count_if //按条件统计元素个数


    2.1 find

    功能描述: 查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()
    函数原型:find(iterator beg, iterator end, value);
    按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
    beg:开始迭代器
    end:结束迭代器
    value:查找的元素


    案例: 使用find查找内置数据类型

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    
    void test01()
    {
    	vector<int> v1;
    	for (int i = 0; i < 10; i++)
    	{
    		v1.push_back(i);
    	}
    	vector<int>::iterator it = find(v1.begin(), v1.end(), 5);
    	if (it == v1.end())
    	{
    		cout << "没找到" << endl;
    	}
    	else
    	{
    		cout << "找到 值为:" << *it << endl;
    	}
    }
    
    int main()
    {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述


    案例: 使用find查找自定义数据类型

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    
    class Person
    {
    public:
    	Person(string name, int age)
    	{
    		this->m_Age = age;
    		this->m_Name = name;
    	}
    	bool operator==(const Person& p)
    	{
    		if (this->m_Name == p.m_Name && this->m_Age == p.m_Age)
    			return true;
    		else
    			return false;	
    	}
    
    	int m_Age;
    	string m_Name;
    };
    
    void test01()
    {
    	Person p1("aaa", 10);
    	Person p2("bbb", 20);
    	Person p3("ccc", 30);
    	Person p4("ddd", 40);
    	Person p5("eee", 50);
    
    	vector<Person> v;
    	v.push_back(p1);
    	v.push_back(p2);
    	v.push_back(p3);
    	v.push_back(p4);
    	v.push_back(p5);
    
    	vector<Person>::iterator it = find(v.begin(), v.end(), p3);
    	if (it == v.end())
    	{
    		cout << "没找到" << endl;
    	}
    	else
    	{
    		cout << "找到了 姓名:" << it->m_Name << " 年龄:" << it->m_Age << endl;
    	}
    }
    
    int main()
    {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述
    代码中要为Person类重载==运算符,否则会出错。这是因为find的源码中直接将迭代器解引用后的数据与要查找的数据对比,而Person是自定义数据类型无法直接对比,所以要重载Person的==运算符。
    在这里插入图片描述


    2.2 find_if

    功能描述: 按条件查找元素
    函数原型: find_if(iterator beg, iterator end, _Pred);
    按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
    beg:开始迭代器
    end:结束迭代器
    _Pred:函数或者谓词(返回bool类型的仿函数)

    案例: 测试内置数据类型和自定义数据类型的find_if功能

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    
    class Person
    {
    public:
    	Person(string name, int age)
    	{
    		this->m_Age = age;
    		this->m_Name = name;
    	}
    	int m_Age;
    	string m_Name;
    };
    
    //测试内置数据类型,查找大于4的数据
    class Greater4
    {
    public:
    	bool operator()(int val)
    	{
    		return val > 5;
    	}
    };
    
    //测试自定义数据类型,查找年龄大于20的数据
    class Greater20
    {
    public:
    	bool operator()(Person& p)
    	{
    		return p.m_Age > 20;
    	}
    };
    
    void test01()
    {
    	vector<int> v1;
    	v1.push_back(3);
    	v1.push_back(4);
    	v1.push_back(5);
    	v1.push_back(6);
    	v1.push_back(7);
    	vector<int>::iterator it = find_if(v1.begin(), v1.end(), Greater4());
    	if (it == v1.end())
    	{
    		cout << "没找到" << endl;
    	}
    	else
    	{
    		cout << "找到 元素为:" << *it << endl;
    	}
    
    	Person p1("aaa", 10);
    	Person p2("bbb", 20);
    	Person p3("ccc", 30);
    	Person p4("ddd", 40);
    	Person p5("eee", 50);
    	vector<Person> v;
    	v.push_back(p1);
    	v.push_back(p2);
    	v.push_back(p3);
    	v.push_back(p4);
    	v.push_back(p5);
    
    	vector<Person>::iterator it2 = find_if(v.begin(), v.end(), Greater20());
    	if (it2 == v.end())
    	{
    		cout << "没找到" << endl;
    	}
    	else
    	{
    		cout << "找到了 姓名:" << it2->m_Name << " 年龄:" << it2->m_Age << endl;
    	}
    }
    
    int main()
    {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述


    2.3 adjacent_find

    功能描述: 查找相邻重复元素
    函数原型:adjacent_find(iterator beg, iterator end);
    查找相邻重复元素,返回相邻元素的第一个位置的迭代器
    beg:开始迭代器
    end:结束迭代器


    示例: 测试adjancent_find功能

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    
    void test01()
    {
    	vector<int> v1;
    	v1.push_back(0);
    	v1.push_back(1);
    	v1.push_back(3);
    	v1.push_back(0);
    	v1.push_back(4);
    	v1.push_back(4);
    	v1.push_back(6);
    	v1.push_back(7);
    	vector<int>::iterator it = adjacent_find(v1.begin(), v1.end());
    	if (it == v1.end())
    	{
    		cout << "没找到" << endl;
    	}
    	else
    	{
    		cout << "找到 元素为:" << *it << endl;
    	}
    }
    
    int main()
    {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述


    2.4 binary_search

    功能描述: 查找指定元素是否存在
    函数原型:bool binary_search(iterator beg, iterator end, value);
    查找指定的元素,查到 返回true 否则false
    注意: 在无序序列中不可用
    beg:开始迭代器
    end:结束迭代器
    value:查找的元素


    示例: 测试binary_search功能

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    
    void test01()
    {
    	vector<int> v;
    	for (int i = 0; i < 10; i++)
    	{
    		v.push_back(i);
    	}
    
    	bool ret = binary_search(v.begin(), v.end(), 2);
    	if (ret == 0)
    	{
    		cout << "没找到" << endl;
    	}
    	else
    	{
    		cout << "找到" <<  endl;
    	}
    }
    
    int main()
    {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述


    2.5 count

    功能描述: 统计元素个数
    函数原型:count(iterator beg, iterator end, value);
    统计元素出现次数
    beg:开始迭代器
    end:结束迭代器
    value:统计的元素


    示例: 对内置数据类型和自定义数据类型测试count功能

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    
    //内置数据类型
    void test01()
    {
    	vector<int> v;
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(4);
    	v.push_back(5);
    	v.push_back(3);
    	v.push_back(4);
    	v.push_back(4);
    
    	int num = count(v.begin(), v.end(), 4);
    
    	cout << "4的个数为: " << num << endl;
    }
    
    //自定义数据类型
    class Person
    {
    public:
    	Person(string name, int age)
    	{
    		this->m_Name = name;
    		this->m_Age = age;
    	}
    	bool operator==(const Person& p)
    	{
    		if (this->m_Age == p.m_Age)
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    	string m_Name;
    	int m_Age;
    };
    
    void test02()
    {
    	vector<Person> v;
    
    	Person p1("刘备", 35);
    	Person p2("关羽", 35);
    	Person p3("张飞", 35);
    	Person p4("赵云", 30);
    	Person p5("曹操", 25);
    
    	v.push_back(p1);
    	v.push_back(p2);
    	v.push_back(p3);
    	v.push_back(p4);
    	v.push_back(p5);
    
    	Person p("诸葛亮", 35);
    
    	int num = count(v.begin(), v.end(), p);
    	cout << "和诸葛亮同岁的人数为:" << num << endl;
    }
    int main() {
    	test01();
    	test02();
    
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述


    2.6 count_if

    功能描述: 按条件统计元素个数
    函数原型:count_if(iterator beg, iterator end, _Pred);
    按条件统计元素出现次数
    beg:开始迭代器
    end:结束迭代器
    _Pred:谓词


    示例: 测试count_if的功能

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    
    class Greater4
    {
    public:
    	bool operator()(int val)
    	{
    		return val >= 4;
    	}
    };
    
    //内置数据类型
    void test01()
    {
    	vector<int> v;
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(4);
    	v.push_back(5);
    	v.push_back(3);
    	v.push_back(4);
    	v.push_back(4);
    
    	int num = count_if(v.begin(), v.end(), Greater4());
    
    	cout << "大于4的个数为: " << num << endl;
    }
    
    //自定义数据类型
    class Person
    {
    public:
    	Person(string name, int age)
    	{
    		this->m_Name = name;
    		this->m_Age = age;
    	}
    
    	string m_Name;
    	int m_Age;
    };
    
    class AgeLess35
    {
    public:
    	bool operator()(const Person& p)
    	{
    		return p.m_Age < 35;
    	}
    };
    void test02()
    {
    	vector<Person> v;
    
    	Person p1("刘备", 35);
    	Person p2("关羽", 35);
    	Person p3("张飞", 35);
    	Person p4("赵云", 30);
    	Person p5("曹操", 25);
    
    	v.push_back(p1);
    	v.push_back(p2);
    	v.push_back(p3);
    	v.push_back(p4);
    	v.push_back(p5);
    
    	int num = count_if(v.begin(), v.end(), AgeLess35());
    	cout << "小于35岁的个数:" << num << endl;
    }
    
    
    int main() {
    	test01();
    	test02();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,结果如下。
    在这里插入图片描述


    三、常用排序算法

    学习目标: 掌握常用的排序算法
    算法简介:
    sort //对容器内元素进行排序
    random_shuffle //洗牌 指定范围内的元素随机调整次序
    merge // 容器元素合并,并存储到另一容器中
    reverse // 反转指定范围的元素

    3.1 sort

    功能描述: 对容器内元素进行排序
    函数原型:sort(iterator beg, iterator end, _Pred);
    按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
    beg:开始迭代器
    end:结束迭代器
    _Pred:谓词


    示例: 测试sort的功能

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    
    void myPrint(int val)
    {
    	cout << val << " ";
    }
    
    void test01() {
    	vector<int> v;
    	v.push_back(10);
    	v.push_back(30);
    	v.push_back(50);
    	v.push_back(20);
    	v.push_back(40);
    
    	//sort默认从小到大排序
    	sort(v.begin(), v.end());
    	for_each(v.begin(), v.end(), myPrint);
    	cout << endl;
    
    	//从大到小排序
    	sort(v.begin(), v.end(), greater<int>());
    	for_each(v.begin(), v.end(), myPrint);
    	cout << endl;
    }
    
    int main() {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述


    3.2 random_shuffle

    功能描述: 洗牌 指定范围内的元素随机调整次序
    函数原型: random_shuffle(iterator beg, iterator end);
    指定范围内的元素随机调整次序
    beg:开始迭代器
    end:结束迭代器

    #include 
    #include 
    #include 
    using namespace std;
    #include 
    
    class myPrint
    {
    public:
    	void operator()(int val)
    	{
    		cout << val << " ";
    	}
    };
    
    void test01()
    {
    //加一个随机数种子,每次都能产生不同的随机值。
    	srand((unsigned int)time(NULL));
    	vector<int> v;
    	for (int i = 0; i < 10; i++)
    	{
    		v.push_back(i);
    	}
    	for_each(v.begin(), v.end(), myPrint());
    	cout << endl;
    
    	//打乱顺序
    	random_shuffle(v.begin(), v.end());
    	for_each(v.begin(), v.end(), myPrint());
    	cout << endl;
    }
    
    int main() {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述


    3.3 merge

    功能描述: 两个容器元素合并,并存储到另一容器中。
    函数原型: merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
    容器元素合并,并存储到另一容器中
    注意: 两个容器必须是有序的
    beg1:容器1开始迭代器
    end1:容器1结束迭代器
    beg2:容器2开始迭代器
    end2:容器2结束迭代器
    dest:目标容器开始迭代器


    示例: 测试merge的功能

    #include 
    #include 
    #include 
    using namespace std;
    
    class myPrint
    {
    public:
    	void operator()(int val)
    	{
    		cout << val << " ";
    	}
    };
    
    void test01()
    {
    	vector<int> v1;
    	vector<int> v2;
    	for (int i = 0; i < 10; i++)
    	{
    		v1.push_back(i);
    		v2.push_back(i + 1);
    	}
    
    	vector<int> vtarget;
    	//目标容器需要提前开辟空间
    	vtarget.resize(v1.size() + v2.size());
    	//合并  需要两个有序序列
    	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vtarget.begin());
    	for_each(vtarget.begin(), vtarget.end(), myPrint());
    	cout << endl;
    }
    
    int main() {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下。
    在这里插入图片描述


    3.4 reverse

    功能描述: 将容器内元素进行反转
    函数原型:reverse(iterator beg, iterator end);
    反转指定范围的元素
    beg:开始迭代器
    end:结束迭代器


    示例: 测试reverse的功能

    #include 
    #include 
    #include 
    using namespace std;
    
    class myPrint
    {
    public:
    	void operator()(int val)
    	{
    		cout << val << " ";
    	}
    };
    
    void test01()
    {
    	vector<int> v;
    	v.push_back(10);
    	v.push_back(30);
    	v.push_back(50);
    	v.push_back(20);
    	v.push_back(40);
    
    	cout << "反转前: " << endl;
    	for_each(v.begin(), v.end(), myPrint());
    	cout << endl;
    
    	cout << "反转后: " << endl;
    
    	reverse(v.begin(), v.end());
    	for_each(v.begin(), v.end(), myPrint());
    	cout << endl;
    }
    
    int main() {
    	test01();
    	system("pause");
    
    	return 0;
    }
    
    • 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

    运行,效果如下
    在这里插入图片描述

  • 相关阅读:
    Java之spring新手教程(包教包会)
    等变性的AI:从离散到连续
    数字求和(C++)
    Mysql 入门
    net start npcap 系统错误31 解决方案 win11 Wireshark
    第三章:最新版零基础学习 PYTHON 教程(第六节 - Python 运算符—Python 中的赋值运算符)
    Maven(1)
    【代码随想录】【回溯算法】补day25:组合总和,电话号码的总和
    AI大模型时代网络安全攻防对抗升级,瑞数信息变革“下一代应用与数据安全”
    学习Uni-app开发小程序Day5
  • 原文地址:https://blog.csdn.net/InnerPeaceHQ/article/details/126022529