基于STL的演讲流程管理系统

完整项目代码已上传gitCode
地址:https://gitcode.net/m0_46663240/stl
1.system("pause");
按任意键之后才会执行下一步
system(“cls”);清屏
2**.vector:**
清空函数:.clear()
3.string 要导入string库#include < string >
4.this->m_Speaker.insert(make_pair(i+10001,sp));
类成员函数中用this可以调用本类中函数及变量
5.map
Class pair 可将两个 value 视为一个单元。C++标准库内多处用到了这个 class。尤其容器 map、multimap、unordered_map和 unordered_multimap就是使用pair来管理其以key/value pair形式存在的元素(详见7.8节第331页)。任何函数如果需返回两个value,也需要用到pair,例如minmax()(见5.5.1节第134页)。
在这里插入图片描述在这里插入图片描述
map:

  1. 关联式容器(Associative container),这是一种已排序(sorted)集合,元素位置取决于其value(或key——如果元素是个key/value pair)和给定的某个排序准则。如果将6个元素置入这样的集合中,它们的值将决定它们的次序,和插入次序无关。STL提供了4个关联式容器:set、multiset、map和multimap。
  2. · Set无序(unordered)容器的主要优点是,当你打算查找一个带某特定值的元素,其速度甚至可能快过关联式容器。事实上无序容器提供的是摊提的常量复杂度(amortized constant complexity),前提是你有一个良好的hash函数。然而提供一个良好的hash函数并非易事(见7.9.2节第363页),你可能需要提供许多内存作为bucket。
  3. 元素依据其value自动排序,每个元素只能出现一次,不允许重复。· Multiset 和set的唯一差别是:元素可以重复。也就是multiset可包括多个“value相同”的元素。· Map 每个元素都是key/value pair,其中key是排序准则的基准。每个key只能出现一次,不允许重复。Map也可被视为一种关联式数组(associative array),也就是“索引可为任意类型”的数组(详见6.2.4节第185页)。· Multimap 和map的唯一差别是:元素可以重复,也就是multimap允许其元素拥有相同的key。Multimap可被当作字典(dictionary)使用。7.8.5节第348页有个范例。所有关联式容器都有一个可供选择的template实参,指明排序准则;默认采用操作符<。排序准则也被用来测试等同性(equivalence):[7]如果两个元素的value/key互不小于对方,则两者被视为重复。你可以将set视为一种特殊的map:元素的value等同于key。实际产品中所有这些关联式容器通常都由二叉树(binary tree)实现而成。
    5.this->m_Speaker.insert(make_pair(i+10001,sp));
    这里的sp是一个类对象,它的定义以及map的定义:
	map<int, Speaker>m_Speaker;
class Speaker
{
public:
	string m_Name;//姓名
	double m_Score[2];//分数
};

所以map的使用百无禁忌,非常灵活,并不是必须要 value- value
6.random_shuffle(v1.begin(), v1.end());
打乱数组顺序
random_shuflle( a,a+n+1);

生成一个前闭右开区间的随机序列,注意这里序列是需要附初始值的。

并且并不只是数字,字母等也是可以的。

random_shuffle()定义在标准的头文件<algorithm.h>
7.
迭代器用来遍历,相当于数组下标,访问其中元素需要*iterator。
在学习C++的过程中我们经常会用到.和::和:和->,在此整理一下这些常用符号的区别。

1、A.B则A为对象或者结构体;

2、A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;

3、::是作用域运算符,A::B表示作用域A中的名称B,A可以是名字空间、类、结构;

4、:一般用来表示继承;

this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。
this是一个指针,得用->访问。

for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
		{
			cout << "编号:  " << *it << "	" << "姓名:	" << this->m_Speaker[*it].m_Name << endl;
		}

(1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,,++ --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,–等操作;
(2)迭代器返回的是对象引用而不是对象的值,所以cout只能输出迭代器使用
取值后的值而不能直接输出其自身。
(3)在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通过迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。
8.multimap<double, int, greater<double>>groupScore;//有序的
multimap允许重复
map不允许重复
greater模板实现从大到小降序排列,不加greater也是降序排列,升序:less
9.

//rand() % 401:0 - 400;所以是400~600对10取余
			//所以产生60-100之间的数
			double score = (rand() % 401 + 600) / 10.f;

10.sort(d.begin(), d.end(), greater());//从大到小排
//去掉最高峰最低分
d.pop_front();
d.pop_back();
11.

ofstream ofs;
	ofs.open("speech.csv", ios::out | ios::app);
ifstream ifs("speech.csv", ios::in);//读文件
	if (!ifs.is_open())
	{
		this->fileEmpty = true;
		cout << "文件不存在" << endl;
		ifs.close();
	}
	//文件是空的情况
	char ch;
	ifs >> ch;
	if (ifs.eof())
	{
		cout << "文件为空" << endl;
		this->fileEmpty = true;
	}

	//文件不为空的情况
	this->fileEmpty = false;

	ifs.putback(ch);//ifs读取用来判断的单个字符放回去

https://www.cnblogs.com/zhoug2020/p/8427277l
14.
在这里插入图片描述
在这里插入图片描述
查看往届记录
在这里插入图片描述
清空记录
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值