• 【C++】STL01-基本使用


    vector

    一、int类型的vector:

    创建vector对象

    #include 
    #include 
    using namespace std;
    
    • 1
    • 2
    • 3

    vector <数据类型> 对象名;

    vector<int> v;
    
    • 1

    添加数据 push_back()

    	//插入数据 push_back()
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(3);
    	v.push_back(4);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    遍历

    1.迭代器while

    vector<int>::iterator itBegin = v.begin();
    	vector<int>::iterator itEnd = v.end();
    
    	while (itBegin != itEnd)
    	{
    		cout << *itBegin << endl;
    		itBegin++;
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.迭代器for

    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    	{
    		cout << *it << endl;
    	}
    
    • 1
    • 2
    • 3
    • 4

    3.for_each()

    for_each()相当于:

    	template<typename InputIterator, typename Function>
    	Function for_each(InputIterator beg, InputIterator end, Function f) {
    		while(beg != end) 
    		f(*beg++);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (1)先创建一个仿函数myprint()

    void myprint(int val)
    {
    	cout << val << endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    (2)使用for_each()

    for_each(v.begin(), v.end(), myprint);
    
    • 1

    二、自定义类型的vector:

    自定义一个Person的数据类型:

    //自定义数据类型
    class Person {
    public:
    	Person(string name, int age) {
    		this->m_Name = name;
    		this->m_Age = age;
    	}
    	string m_Name;
    	int m_Age;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    创建vector对象

    void test02()
    {
    	vector<Person> v;
    	Person p1("aaa", 10);
    	Person p2("bbb", 20);
    	Person p3("ccc", 30);
    	Person p4("ddd", 40);
    	//添加
    	v.push_back(p1);
    	v.push_back(p2);
    	v.push_back(p3);
    	v.push_back(p4);
    	//遍历
    	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
    	{
    		cout << "姓名:" << it->m_Name << "  年龄:" << (*it).m_Age << endl;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    int main(void)
    {
    	test01();
    	cout << "自定义数据类型Person" << endl;
    	test02();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    三、容器的嵌套

    创建嵌套容器对象–大容器

     //创建嵌套容器对象--大容器
    	vector<vector<int>> v;
    
    • 1
    • 2

    创建小容器对象

    //创建小容器对象
    vector<int> v1;
    vector<int> v2;
    vector<int> v3;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    给小容器赋值

    //给小容器赋值
    for (int i = 0; i < 5; i++)
    {
    	v1.push_back(i + 1);
    	v2.push_back(i + 10);
    	v3.push_back(i + 100);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    将小容器添加进大容器

    //将小容器添加进大容器
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    
    • 1
    • 2
    • 3
    • 4

    遍历

    循环嵌套

    //遍历
    for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
    {
    	for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
    	{
    		cout << *vit << " ";
    	}
    	cout << endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    main测试:

    int main(void)
    {
    	/*
    	test01();
    	cout << "====自定义数据类型Person====" << endl;
    	test03();*/
    	cout << "====容器的嵌套====" << endl;
    	test04();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    结果:
    在这里插入图片描述

    完整代码

    #include 
    #include 
    #include//标准算法头文件
    using namespace std;
    //
    void myprint(int val)
    {
    	cout << val << endl;
    }
    void test01()
    {
    	vector<int> v;
    	//插入数据 push_back()
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(3);
    	v.push_back(4);
    
    	//遍历:1.迭代器while 2.迭代器for 
    	/*1.
    	vector::iterator itBegin = v.begin();
    	vector::iterator itEnd = v.end();
    
    	while (itBegin != itEnd)
    	{
    		cout << *itBegin << endl;
    		itBegin++;
    	}
    	*/
    	/*2
    	for (vector::iterator it = v.begin(); it != v.end(); it++)
    	{
    		cout << *it << endl;
    	}*/
    	//3.for_each
    	for_each(v.begin(), v.end(), myprint);
    	/*
    	template
    	Function for_each(InputIterator beg, InputIterator end, Function f) {
    		while(beg != end)
    		f(*beg++);
    	}
    	*/
    
    }
    
    //自定义数据类型
    class Person {
    public:
    	Person(string name, int age) {
    		this->m_Name = name;
    		this->m_Age = age;
    	}
    	string m_Name;
    	int m_Age;
    };
    
    void test02()
    {
    	vector<Person> v;
    	Person p1("aaa", 10);
    	Person p2("bbb", 20);
    	Person p3("ccc", 30);
    	Person p4("ddd", 40);
    	//添加
    	v.push_back(p1);
    	v.push_back(p2);
    	v.push_back(p3);
    	v.push_back(p4);
    	//遍历
    	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
    	{
    		cout << "姓名:" << it->m_Name << "  年龄:" << (*it).m_Age << endl;
    	}
    }
    //指针类型的对象
    void test03()
    {
    	vector<Person*> v;
    	Person p1("aaa", 10);
    	Person p2("bbb", 20);
    	Person p3("ccc", 30);
    	Person p4("ddd", 40);
    	//添加
    	v.push_back(&p1);
    	v.push_back(&p2);
    	v.push_back(&p3);
    	v.push_back(&p4);
    	//遍历
    	for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++)
    	{
    		cout << "姓名:" << (*it)->m_Name << "  年龄:" << (*it)->m_Age << endl;
    	}
    }
    
    //容器的嵌套
    void test04()
    {
    	//创建嵌套容器对象--大容器
    	vector<vector<int>> v;
    	//创建小容器对象
    	vector<int> v1;
    	vector<int> v2;
    	vector<int> v3;
    	//给小容器赋值
    	for (int i = 0; i < 5; i++)
    	{
    		v1.push_back(i + 1);
    		v2.push_back(i + 10);
    		v3.push_back(i + 100);
    	}
    
    	//将小容器添加进大容器
    	v.push_back(v1);
    	v.push_back(v2);
    	v.push_back(v3);
    	//遍历
    	for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
    	{
    		for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
    		{
    			cout << *vit << " ";
    		}
    		cout << endl;
    	}
    
    }
    
    int main(void)
    {
    	/*
    	test01();
    	cout << "====自定义数据类型Person====" << endl;
    	test03();*/
    	cout << "====容器的嵌套====" << endl;
    	test04();
    	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
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
  • 相关阅读:
    教你如何在优麒麟上搭建 RISC-V 交叉编译环境
    Windows子系统的安装与使用
    一些安全相关的命令
    Linux操作Jmeter(附带:关于连接上redis无法进行写入操作的问题),JMeter配置多用户进行压力测试
    智云通CRM:做销售一定要慎说六种话,不然快成交的订单也会跑?
    浅刷牛客链表题,逐步深入链表,理解链表
    【微服务】SpringCloud中Ribbon的轮询(RoundRobinRule)与重试(RetryRule)策略
    【每日一题】完美洗牌
    Python3.9的69个内置函数(内建函数)介绍,并附简单明了的示例代码
    成都东部新区文化旅游体育局莅临国际数字影像产业园参观入驻企业,共促政产交流“零距离”
  • 原文地址:https://blog.csdn.net/kin_16/article/details/126336839