一、实验内容
1.撰写自己的算法和函数,结合容器和迭代器解决序列变换(如取反、平方、立方),像素变换(二值化、灰度拉伸); 2.用set存储学生信息,并进行增删改查操作; 3.输入一个字符串,用map统计每个字符出现的次数并输出字符及对应的次数。
二、代码实现
1.数据类型确定和不确定时,分别执行取反操作
void transInv(int a[],int b[],int nNum){
for(int i =0; i<nNum; i++){
b[i]= - a[i];
}
}
void output(string name, ostream&os, int a[], int Nnum){
os<<name<<"\t";
for(int i = 0; i<Nnum; i++){
os<<a[i]<<"\t";
}
os<<endl;
}
template<typename Input, typename Output>
void transInv(Input Inputbegin, Input Inputend, Output outputbegin){
for(;Inputbegin!=Inputend;Inputbegin++,outputbegin++){
*outputbegin = -(*Inputbegin);
}
}
template<typename T>
void output(string name, ostream&os, T begin, T end){
os<<name<<"\t";
for(;begin!=end;begin++){
os<<*begin<<"\t";
}
os<<endl;
}
2.set容器
void Test_Student_Set(){
set<studentInfo> studentSet;
studentSet.insert(studentInfo("fdy","20"));
studentSet.insert(studentInfo("zwj","23"));
studentSet.insert(studentInfo("why","20"));
output("studentSet",cout,studentSet.begin(),studentSet.end());
studentSet.erase(studentInfo("why","20"));
output("studentSet",cout,studentSet.begin(),studentSet.end());
set<studentInfo>::iterator iter;
iter=studentSet.find(studentInfo("fdy","20"));
cout<<*iter<<endl;
const_cast<studentInfo*>(&(*iter))->_stuNam = "fffdy";
cout<<iter->_stuNam;
output("studentSet",cout,studentSet.begin(),studentSet.end());
}
3.map的使用
void Test_Map(){
map<char, int> s;
char c[20]="qtgewshetjhgsd";
for(int i = 0; i<20; i++){
if(isalpha(c[i])){
c[i]=tolower(c[i]);
s[c[i]]++;
}
}
for(map<char,int>::iterator iter = s.begin(); iter != s.end(); iter++)
cout<< iter->first<<" "<<iter->second<<endl;
}
三、知识点总结
1.STL各大容器的特点: (1.可以用下标访问的容器有(既可以插入也可以赋值):vector、deque、map;特别要注意一下,vector和deque如果没有预先指定大小,是不能用下标法插入元素的! (2. 序列式容器才可以在容器初始化的时候制定大小,关联式容器不行; (3.注意,关联容器的迭代器不支持it+n操作,仅支持it++操作。 其中,序列式容器:vector、dequeue、list,关联式容器:set/multiset、map/multimap。 2.对于关联式容器的特点: (1.关联式容器都是有序的,升序排列,自动排序; (2.实现的是一个平衡二叉树,每个元素都有一个父节点和两个子节点,左子树的所有元素都比自己小,右子树的所有元素都比自己大; 3.set容器 构造set集合的主要目的是为了快速检索,去重与排序 (1.set存储的是一组无重复的元素,而multiset允许存储有重复的元素; (2.如果要修改某一个元素值,必须先删除原有的元素,再插入新的元素。 4.map容器 (1) map为单重映射、multimap为多重映射; (2) 主要区别是map存储的是无重复键值的元素对,而multimap允许相同的键值重复出现,既一个键值可以对应多个值。 (3) map内部自建了一颗红黑二叉树,可以对数据进行自动排序,所以map里的数据都是有序的。 (4)自动建立key-value的对应关系,key和value可以是你需要的任何类型。 (5) key和value一一对应的关系可以去重。
https://blog.csdn.net/weixin_41588502/article/details/87978490 https://www.cnblogs.com/sea520/p/12711554.html
|