IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ STL应用 -> 正文阅读

[C++知识库]C++ STL应用

实验要求

  • 撰写自己的算法和函数,结合容器和迭代器解决序列变换(如取反、平方、立方),像素变换(二值化、灰度拉伸);
  • 用set存储学生信息,并进行增删改查操作;
  • 输入一个字符串,用map统计每个字符出现的次数并输出字符及对应的次数

实验内容及测试代码

取反与平方函数

用一般函数来实现取反和平方


//取反函数
void transInv(int a[], int b[], int nNum) {
	for (int i = 0; i < nNum; i++) {
		b[i] = -a[i];
	}
}

//平方函数
void transSqr(int a[], int b[], int nNum) {
	for (int i = 0; i < nNum; i++) {
		b[i] = a[i]*a[i];
	}
}

用模板函数来实现取反和平方


//使用模板函数取反
template < typename T>
void transInvT(T a[], T b[], int nNum) {
	for (int i = 0; i < nNum; i++) {
		b[i] = -a[i];
	}
}

//使用模板函数求平方
template < typename T>
void transSqrT(T a[], T b[], int nNum) {
	for (int i = 0; i < nNum; i++) {
		b[i] = a[i] * a[i];
	}
}

输出模板函数

//输出模板函数
template < typename T>
void outputCont(string strNme, ostream& os, T begin, T end) {
	os << strNme << ": ";
	for (; begin != end; begin++) {
		os << *begin << " ";
	}
	os << endl;
}

测试函数

void test1() {
const int N = 5;
	int a[N] = { 1,2,3,4,5 };
	//输出a
	outputCont("a", cout, a, a + N);
	int b[N];
	transInv(a, b, N);
	//输出取反后的数
	outputCont("Inv a", cout, b, b + N);
	transSqr(a, b, N);
	//输出平方后的数
	outputCont("Sqr a", cout, b, b + N);

	transInvT(a, b, N);
	outputCont("Inv a T", cout, b, b + N);

	transSqrT(a, b, N);
	outputCont("Sqr a T", cout, b, b + N);

}

运行结果如下
在这里插入图片描述

像素变换函数

像素变换函数

template <typename inputIter, typename outputIter, typename MyOperator>
void transInvT(inputIter begInput, inputIter endInput,
	outputIter begOutPut, MyOperator op)
{
	for (; begInput != endInput; begInput++, begOutPut++)
	{
		//*begOutPut = ‐ (*begInput); 
	   //改为函数的形式,就不需要对取反、平方等每一个算法重写一个函数
		*begOutPut = op(*begInput);
	}
}

template<typename T>
class MyThreshold {
public:
	MyThreshold(int n = 128) : _nThreshold(n){}
	int operator()(T val)
	{
		return val < _nThreshold ? 0 : 1;
	}
	int _nThreshold;
};

测试函数

void test2(){
	const int N = 5;
	int a[N] = { 1,2,3,4,5 };
	int b[N];
	vector<double> vb(N);
	vector<double> vc(N);
	transInvT(a, a + N, b, InvT<int>);
	transInvT(a, a + N, vb.begin(), InvT<int>);
	outputCont("Inv a by iter", cout, vb.begin(), vb.end());
	transInvT(a, a + N, vb.begin(), MyThreshold<int>(2));
	outputCont("Inv a by treshold", cout, vb.begin(), vb.end());

}

运行结果如下
在这里插入图片描述

用set存储学生信息,并进行增删改查操作

构造一个students类

class studentInfo {
public:
	studentInfo(string strNo, string strName) {
		_strNo = strNo;
		_strName = strName;
	}
	string _strNo;
	string _strName;
	friend ostream& operator<<(ostream& os, const studentInfo& info)
	{
		os << info._strNo << " " << info._strName;
		return os;
	}
	friend bool operator<(const studentInfo& info1, const studentInfo& info2) {
		return info1._strNo < info2._strNo;

	}
};

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:05:10  更:2021-11-28 11:05:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:38:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码