目录
1.撰写自己的算法和函数,结合容器和迭代器解决序列变换(如取反、平方、立方),像素变换(二值化、灰度拉伸)
3.输入一个字符串,用map统计每个字符出现的次数并输出字符及对应的次数
一、实验内容
1.撰写自己的算法和函数,结合容器和迭代器解决序列变换(如取反、平方、立方),像素变换(二值化、灰度拉伸);
2.用set存储学生信息,并进行增删改查操作;
3.输入一个字符串,用map统计每个字符出现的次数并输出字符及对应的次数。
二、实验过程
1.撰写自己的算法和函数,结合容器和迭代器解决序列变换(如取反、平方、立方),像素变换(二值化、灰度拉伸)
1.1 非模板函数实现
就是使用最普通的方法对元素进行取反、平方和立方操作。
实现代码:
void transInvT(T a[],T b[],int nNum) //对元素取反
{
for(int i=0;i<nNum;i++)
{
b[i] = -a[i];
}
}
void transSqrT(T a[],T b[],int nNum) //对元素求平方
{
for(int i=0;i<nNum;i++)
{
b[i] = a[i]*a[i];
}
}
void transPow(T a[],T b[],int nNum) //对元素求立方
{
for(int i=0;i<nNum;i++)
{
b[i] = a[i]*a[i]*a[i];
}
}
void TestTrans()
{
const int N=5;
int a[N] = {2,4,6,8,10};
outputCont("a",cout,a,a+N);
int b[N];
vector<double> vb(N);
transInv(a,b,N);
outputCont("Inv a",cout,b,b+N);
transSqr(a,b,N);
outputCont("Sqr a",cout,b,b+N);
transPow(a,b,N);
outputCont("Pow a",cout,b,b+N);
transInvT(a,b,N);
}
运行结果:
1.2 模板函数实现
模板函数这方面可以看我上次发的关于模板函数的博客。C++ 模板类与智能指针
实现代码:
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 transPow(T a[],T b[],int nNum) //对元素求立方
{
for(int i=0;i<nNum;i++)
{
b[i] = a[i]*a[i]*a[i];
}
}
template<typename T>
T InvT(T a)
{
return -a;
}
template<typename T>
class MyThreshold
{
public:
int _nThreshold;
MyThreshold(int n=128):_nThreshold(n){}
int operator()(T val)
{
return val<_nThreshold?0:1; //小于_nThreshold返回0
}
};
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>
void outputCont(string strName,ostream& os,T begin,T end) //输出元素
{
os<<strName<<":";
for(;begin!=end;begin++)
{
os<<*begin<<"\t";
}
os<<endl;
}
void TestTrans()
{
const int N=5;
int a[N] = {2,4,6,8,10};
outputCont("a",cout,a,a+N);
int b[N];
vector<double> vb(N);
transInv(a,b,N);
outputCont("Inv a",cout,b,b+N);
transSqr(a,b,N);
outputCont("Sqr a",cout,b,b+N);
trans