当前位置: 首页 > news >正文

STL 基础入门

//STL 标准模板库
//STL广义上分为 容器,算法,迭代器
//容器和算法之间通过迭代器进行无缝链接

 容器

——放数据的

将运用最广泛的一些数据结构实现出来。

容器分为序列式容器和关联式容器

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

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

算法Algorithms

——解决问题的

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

非质变算法:不会更改元素内容。如查找,计数,遍历

迭代器

——算法通过迭代器才能访问容器中的元素

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

迭代器类似于指针

双向和随机访问常用 

vector存放内置数据类型

容器Vector,可以理解为数组

#include<iostream>
using namespace std;
//vector容器存放内置数据类型
#include<vector>//包含vector头文件
#include<algorithm>//标准算法的头文件

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

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

	//向容器中插入数据
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

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

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

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


	//第三种遍历方式 利用STL提供遍历算法
	for_each(v.begin(), v.end(), myPrint);

}

int main() {
	test01();
	return 0;
}

vector容器中存放自定义数据类型

#include<iostream>
using namespace std;
#include<vector>
#include<string.h>

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

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 << (*it).m_Name << (*it).m_Age << endl;
		//*it 是Person的数据类型

		cout << it->m_Name << it->m_Age << endl;
		//两种方式都可以
	}
}

//存放自定义数据类型的指针
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);

	//遍历容器
	for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++) {
		cout << (*it)->m_Name << (*it)->m_Age << endl;
			//*it是Person类型的指针
	}
}

int main() {
	//test01();
	test02();
	return 0;
}

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;

	//向小容器中添加数据
	for (int i = 0; i < 4; i++) {
		v1.push_back(i + 1);
		v2.push_back(i + 2);
		v3.push_back(i + 3);
		v4.push_back(i + 4);
	}

	//将小容器插入到大容器中
	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);

	//通过大容器,把所有数据遍历一遍
	for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++) {
		//*it 是大容器 vector<int>    *(*it)是指针
		for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++) {
			cout << *vit << " ";
		}
		cout << endl;
	}
}
int main() {
	test01();
	return 0;
}

相关文章:

  • 炫酷的HTML5粒子动画特效实现详解
  • GitLens with `Commit Graph`
  • 秒杀业务如何设计
  • 【实战】deepseek数据分类用户评论数据
  • 如何编写一个Spring Boot Starter
  • 语法: result=fmod(val1, val2)
  • python3最新版下载及python 3.13.1安装教程(附安装包)
  • DeepSeek自学手册:《从理论(模型训练)到实践(模型应用)》|73页|附PPT下载方法
  • δ函数相关的定义和性质
  • 免费下载 | 2025低空经济产业发展报告
  • 什么是嵌入式处理器
  • 玄机-第四章 windows实战-wordpress的测试报告
  • Windows系统提权
  • 《Git:基本命令使用》
  • 【python】12. File
  • QT多线程实战经验
  • 深入C++:operator new与operator delete重载探秘
  • 常用数据库远程连接工具全解析:从入门到高效管理
  • MySQL Router被HTTP流量击穿
  • 读《浪潮之巅》:探寻科技产业的兴衰密码
  • 受天气等影响SC8041航班三次备降延误超12小时,山航致歉
  • 旭辉控股集团:去年收入477.89亿元,长远计划逐步向轻资产业务模式转型
  • 铁路上海站迎五一假期客流最高峰,今日预计发送77万人次
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 马上评丨准入壁垒越少,市场活力越足
  • 广东省副省长刘红兵跨省调任湖南省委常委、宣传部长