栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ STL应用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ STL应用

目录
  • 实验要求
  • 实验内容及测试代码
    • 取反与平方函数
    • 像素变换函数
    • 用set存储学生信息,并进行增删改查操作

实验要求
  • 撰写自己的算法和函数,结合容器和迭代器解决序列变换(如取反、平方、立方),像素变换(二值化、灰度拉伸);
  • 用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 
void transInvT(inputIter begInput, inputIter endInput,
	outputIter begOutPut, MyOperator op)
{
	for (; begInput != endInput; begInput++, begOutPut++)
	{
		//*begOutPut = ‐ (*begInput); 
	   //改为函数的形式,就不需要对取反、平方等每一个算法重写一个函数
		*begOutPut = op(*begInput);
	}
}

template
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 vb(N);
	vector vc(N);
	transInvT(a, a + N, b, InvT);
	transInvT(a, a + N, vb.begin(), InvT);
	outputCont("Inv a by iter", cout, vb.begin(), vb.end());
	transInvT(a, a + N, vb.begin(), MyThreshold(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;

	}
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604643.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号