2024年C C++最全C++笔记 5(3),看完不会的来打我

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

**容器:**置物之所也

STL容器就是将运用最广泛的一些数据结构实现出来

常用的数据结构:数组, 链表,树, 栈, 队列, 集合, 映射表 等

这些容器分为序列式容器关联式容器两种:

序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。

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

**算法:**问题之解法也

有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms)

算法分为:质变算法非质变算法

质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等

非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等

**迭代器:**容器和算法之间粘合剂

提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。

每个容器都有自己专属的迭代器

迭代器使用非常类似于指针,初学阶段我们可以先理解迭代器为指针

迭代器种类:

| 种类 | 功能 | 支持运算 |

| — | — | — |

| 输入迭代器 | 对数据的只读访问 | 只读,支持++、==、!= |

| 输出迭代器 | 对数据的只写访问 | 只写,支持++ |

| 前向迭代器 | 读写操作,并能向前推进迭代器 | 读写,支持++、==、!= |

| 双向迭代器 | 读写操作,并能向前和向后操作 | 读写,支持++、–, |

| 随机访问迭代器 | 读写操作,可以以跳跃的方式访问任意数据,功能最强的迭代器 | 读写,支持++、–、[n]、-n、<、<=、>、>= |

常用的容器中迭代器种类为双向迭代器,和随机访问迭代器

2.5 容器算法迭代器初识

了解STL中容器、算法、迭代器概念之后,我们利用代码感受STL的魅力

STL中最常用的容器为Vector,可以理解为数组,下面我们将学习如何向这个容器中插入数据、并遍历这个容器

2.5.1 vector存放内置数据类型

容器: vector

算法: for_each

迭代器: vector<int>::iterator

示例:


#include <vector>

#include <algorithm>



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.begin()返回迭代器,这个迭代器指向容器中第一个数据

	//v.end()返回迭代器,这个迭代器指向容器元素的最后一个元素的下一个位置

	//vector<int>::iterator 拿到vector<int>这种容器的迭代器类型



	vector<int>::iterator pBegin = v.begin();

	vector<int>::iterator pEnd = v.end();



	//第一种遍历方式:

	while (pBegin != pEnd) {

		cout << *pBegin << endl;

		pBegin++;

	}



	

	//第二种遍历方式:

	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {

		cout << *it << endl;

	}

	cout << endl;



	//第三种遍历方式:

	//使用STL提供标准遍历算法  头文件 algorithm

	for_each(v.begin(), v.end(), MyPrint);

}



int main() {



	test01();



	system("pause");

	return 0;

}



2.5.2 Vector存放自定义数据类型

学习目标:vector中存放自定义数据类型,并打印输出

示例:


#include <vector>

#include <string>



//自定义数据类型

class Person {

public:

	Person(string name, int age) {

		mName = name;

		mAge = age;

	}

public:

	string mName;

	int mAge;

};

//存放对象

void test01() {



	vector<Person> v;



	//创建数据

	Person p1("aaa", 10);

	Person p2("bbb", 20);

	Person p3("ccc", 30);

	Person p4("ddd", 40);

	Person p5("eee", 50);



	v.push_back(p1);

	v.push_back(p2);

	v.push_back(p3);

	v.push_back(p4);

	v.push_back(p5);



	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {

		cout << "Name:" << (*it).mName << " Age:" << (*it).mAge << endl;

		//(*it)是Person類型

	}

}



//放对象指针

void test02() {



	vector<Person*> v;



	//创建数据

	Person p1("aaa", 10);

	Person p2("bbb", 20);

	Person p3("ccc", 30);

	Person p4("ddd", 40);

	Person p5("eee", 50);



	v.push_back(&p1);

	v.push_back(&p2);

	v.push_back(&p3);

	v.push_back(&p4);

	v.push_back(&p5);


![img](https://img-blog.csdnimg.cn/img_convert/b720da327054cd27e0856b905058be33.png)
![img](https://img-blog.csdnimg.cn/img_convert/e3e0e0959aed6118508c9e9ebe3b5ae3.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**



	v.push_back(&p3);

	v.push_back(&p4);

	v.push_back(&p5);


[外链图片转存中...(img-MhkhTv8a-1715524261778)]
[外链图片转存中...(img-qAiOnGXD-1715524261779)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值