C++进阶编程 --- 2.初始STL

第二章:

2.STL

2.1 STL诞生
  • 对了建立数据结构和算法的一套标准,诞生了STL
2.2 STL基本概念
  • STL(Standard Template Library)标准模板库

  • 从广义分为:容器(container)、算法(algorithm)、迭代器(iterator)

  • 容器与算法之间通过迭代器进行连接

2.3 STL六大组件
  • 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据

  • 算法:各种常用算法,如sort、find、copy、for_each等

  • 迭代器:容器与算法之间的桥梁

  • 仿函数:可作为算法的某种策略

  • 适配器:一种用来修饰容器或仿函数或迭代接口的东西

  • 空间配置器:负责空间的配置与管理

2.4 STL容器、算法、迭代器

容器:置物

容器分为两种

  1. 序列式容器:强调值之间的排序关系,序列时容器中每个元素都有固定的位置

  2. 关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系

算法:问题解法

算法分为两种

  1. 质变算法:运算过程中会更改区间内的元素内容,如拷贝、替换、删除等操作

  2. 非质变算法:运算过程中不会更改区间内的元素内容,如查找、计数、寻找极值等操作

迭代器:提供一种方法,使其能够依序寻访某个容器中所含的各个元素,而又无需暴露该容器的内部表示方法,每个容器都有自己的专属迭代器。

迭代器种类

种类 功能 支持运算
输入迭代器 对数据只读访问 只读,支持++ 、==、 !=
输出迭代器 对数据只写访问 只写,支持++
前向迭代器 读写操作,并能向前推进迭代器 读写,支持++、==、!=
双向迭代器 读写操作,并能向前和向后操作 读写,支持++,–
随机访问迭代器 读写操作,可跳跃的方式访问任意数据,功能最强 读写,支持++、–、[n]、-n、<、<=、>、>=
2.5 容器算法迭代器
2.5.1 vector存放内置数据类型

容器:vector

算法:for_each

迭代器:

vector<int>::iterator
#include <iostream>
using namespace std;
#include <vector>    //使用容器vector需包含该头文件
#include <algorithm> //使用for_each需包含该算法头文件

void myPrint(int val)
{
    cout << val << endl;
}

void test01()
{
    //创建一个vector容器
    vector<int> v;

    //插入数据
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    v.push_back(50);

    //通过迭代器访问
    vector<int>::iterator itBegin = v.begin(); //起始迭代器,指向容器第一个元素
    vector<int>::iterator itEnd = v.end();     //结束迭代器,指向容器最后一个元素的下一个位置

    //方式1 遍历 - while
    while (itBegin != itEnd)
    {
        cout << *itBegin << endl;
        itBegin++;
    }

    //方式2 遍历 - for
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *it << endl;
    }

    //方式3 遍历 - STL提供遍历算法
    for_each(v.begin(), v.end(), myPrint);

}

int main()
{
    test01();
    system("pause");
    return 0;
} 
2.5.2 vector存放自定义数据类型
#include <iostream>
using namespace std;
#include <string>
#include <vector>

class Student  //自定义数据类型
{
public:
	Student(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	string m_Name;
	int m_Age;
};

void test01()
{
	vector<Student> v;

	Student s1("小明", 20);
	Student s2("小红", 21);
	Student s3("小李", 18);
	Student s4("小王", 19);
	Student s5("小刘", 22);

	v.push_back(s1);
	v.push_back(s2);
	v.push_back(s3);
	v.push_back(s4);
	v.push_back(s5);

	for (vector<Student>::iterator it = v.begin(); it != v.end(); it++)
	{
		//cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << endl;
		cout << "姓名:" << it->m_Name << " 年龄:" << it->m_Age << endl;
	}
}

void test02() //自定义数据类型 - 指针
{
	vector<Student*> v;

	Student s1("小明", 20);
	Student s2("小红", 21);
	Student s3("小李", 18);
	Student s4("小王", 19);
	Student s5("小刘", 22);

	v.push_back(&s1);
	v.push_back(&s2);
	v.push_back(&s3);
	v.push_back(&s4);
	v.push_back(&s5);

	for (vector<Student*>::iterator it = v.begin(); it != v.end(); it++)
	{
		//cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << endl;
		cout << "姓名:" << (*it)->m_Name << " 年龄:" << (*it)->m_Age << endl;
	}
}

int main()
{
	test01();
	test02();
	system("pause");
	return 0;
}
2.5.3 vector容器嵌套容器
#include <iostream>
using namespace std;
#include <vector>

void test01()
{
	vector<vector<int>> v; 

	vector<int> v1;
	vector<int> v2;
	vector<int> v3;
	vector<int> v4;
	vector<int> v5;

	for (int i = 0; i < 5; i++)
	{
		v1.push_back(i + 1);
		v2.push_back(i + 2);
		v3.push_back(i + 3);
		v4.push_back(i + 4);
		v5.push_back(i + 5);
	}

	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);
	v.push_back(v5);

	for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
	{
		for (vector<int>::iterator itBegin = (*it).begin(); itBegin != (*it).end(); itBegin++)
		{
			cout << *itBegin << " ";
		}
		cout << endl;
	}

}

int main()
{
	test01();
	system("pause");
	return 0;
}

相关推荐

  1. C++编程 --- 2.初始STL

    2024-04-01 15:38:02       18 阅读
  2. C++面对对象编程2

    2024-04-01 15:38:02       37 阅读
  3. C++——STL

    2024-04-01 15:38:02       13 阅读
  4. shell编程

    2024-04-01 15:38:02       44 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 15:38:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 15:38:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 15:38:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 15:38:02       20 阅读

热门阅读

  1. 【C语言】字符串

    2024-04-01 15:38:02       19 阅读
  2. 3498. 日期差值

    2024-04-01 15:38:02       17 阅读
  3. 第八章 贪心算法 part05

    2024-04-01 15:38:02       18 阅读
  4. CSS学习

    2024-04-01 15:38:02       18 阅读
  5. Hive查询转换与Hadoop生态系统引擎与优势

    2024-04-01 15:38:02       18 阅读
  6. python语言访问字典元素

    2024-04-01 15:38:02       14 阅读
  7. c++ vector介绍

    2024-04-01 15:38:02       17 阅读
  8. 嵌入式C语言--GPT通用定时器

    2024-04-01 15:38:02       19 阅读
  9. vue3中watch详解

    2024-04-01 15:38:02       16 阅读