1.撰写自己的算法和函数,结合容器和迭代器解决序列变换(如取反、平方、立方),像素变换(二值化、灰度拉伸);
序列变换代码:
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];
}
}
void transCube(int a[], int b[], int nNum)//立方操作
{
for (int i = 0; i < nNum; i++)
{
b[i] = a[i] * a[i] * a[i];
}
}
template<typename inputIter,typename outputIter,typename MyOperator>
void transInvT(inputIter begInput, inputIter endInput, outputIter begOutPut, MyOperator op)
{
for (; begInput != endInput; begInput++, begOutPut++)
{
*negOutPut = op(*begInput);
}
}
template<typename T>//结果输出
void outputCont(string strNme, ostream& os, T begin, T end)
{
os << strNme << ":";
for (; begin != end; begin++)
{
os << *begin << "\t";
}
os << endl;
}
模板函数:
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>
T InvT(T a)
{
return -a;
}
像素变换代码:
二值化:
template<typename T>
class MyThreshold {
public:
MyThreshold(int n = 128) :_nThreshold(n) {}
int operator()(T val)
{
return val < _nThreshold ? 0 : 1;
}
int _nThershold;
};
2.用set存储学生信息,并进行增删改查操作;
void TestSet()
{
vector<studentInfo> students;
students.push_back(studentInfo("00","a"));
students.push_back(studentInfo("01", "b"));
students.push_back(studentInfo("02", "c"));
students.push_back(studentInfo("03", "d"));
students.push_back(studentInfo("04", "e"));
set<studentInfo>studentSet(students.begin(), students.end());
outputCont("student set", cout, studentSet.begin(), studentSet.end());
studentSet.insert(studentInfo("05", "f"));//插入
outputCont("student set", cout, studentSet.begin(), studentSet.end());
studentSet.erase(studentInfo("02", "b"));//删除
outputCont("student set", cout, studentSet.begin(), studentSet.end());
}
3.输入一个字符串,用map统计每个字符出现的次数并输出字符及对应的次数。
void Testmap()
{
map<char, int> t;
char c;
do {
cin >> c;
if (isalpha(c)) {
c = tolower(c);
t[c]++;
}
} while (c != '.');
for (map<char, int>::iterator iter = t.begin(); iter != t.end(); ++iter)
{
cout << iter->first << " " << iter->second << " ";
}
cout << endl;
}