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++ 实验四 -> 正文阅读

[C++知识库]C++ 实验四

一、实验内容

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;
    //cout<<iter->_stuNam<<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]]++;//该字符出现次数+1
       }
    }

    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

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:31:50  更:2021-12-01 17:32: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年5日历 -2024/5/3 7:43:38-

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