[C++学习实验4] StL应用

本文介绍了C++中的STL,包括容器和迭代器的概念、优点,以及序列变换、像素变换的示例。重点讲解了set和map的应用,如用set存储学生信息并进行增删改查,以及用map统计字符串中每个字符出现的次数。
摘要由CSDN通过智能技术生成

一、容器和迭代器

1.容器的来源:

        众所周知,数组有一个弊端,它是固定的,不可变,由于这个限制会导致出现数组越界导常的错误,并且需要事先知道这个数组的长度才可以定义, 但很多时候,我们无法预估所需要的数组参数。

        所以我们创造了容器,它是不固定的,可变的,可以根据元素的增加而增加,每次增加原数组的1.5倍,为什么是1.5倍呢?因为2倍太大了,1倍太小,所以为了保证效率,择中选1.5倍。在C++中,容器被定义为:在数据存储上,有一种对象类型,它可以持有其他对象或指向其他对象的指针,这种对象类型就叫做容器。简单理解,即容器就是保存其他对象的对象。而且,这种“对象”还有处理“其他对象”的方法。

        容器是随着面向对象语言的诞生而提出的,它甚至被认为是早期面向对象语言的基础。现在几乎所有面向对象语言中都伴随着一个容器,C++中则是标准模版库(STL)。C++采用基于模版的方式处理容器,STL中的容器提供了多种数据结构。
        

2.容器与数组的区别
        数组能存基础数据类型,也可以存引用数据类型;容器只能存引用数据类型数组的长度是固定的,容器的长度可以根据元素的增加而增加 

        我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。

        容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。

▲容器的优点

        容器类是一种对特定代码重用问题的良好的解决方案。可自行扩展。当不知道需要存储多少对象时,就不知道应当开辟多大内存空间,而容器不需要预先设定空间长度,只需要创建一个对象并合理调用其提供的方法,其余的细节则由它自身完成,它自己申请内存或释放内存,并使用最优算法执行所有命令。容器类自动申请和释放内存,因此无需进行new和delete操作。

3.容器的分类

序列式容器-排列次序取决于插入时机和位置 关联式容器-排列顺序取决于特定准则

4.为什么会有迭代器?
        数组有的功能,容器大部分都会有。数组存放数据可能是有序的,也可能是无序的。所以容器也具备同样的功能,容器英文:Collection,有序的表示为List,即链表结构,无序的表示为Set,即想在哪建立就在哪建立。问题来了,有序的List,我们可以通过索引来遍历数组。但无序的Set怎么办? 用一句话总结:Iterator类的访问方式就是把不同集合类的访问逻辑抽象出来,使得不用暴露集合内部的结构而

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,实验十的内容是关于STL(Standard Template Library)的应用STLC++标准库中的一部分,提供了许多通用的数据结构和算法,包括容器(如vector、list、map等)、迭代器、算法(如排序、查找等)和函数对象等。STL的使用可以大大提高程序的效率和可读性。 下面是一些STL应用实例。 1. 使用vector容器存储数据 vector是一个动态数组,可以自动调整大小以适应存储数据的需求。以下是一个例子,演示如何使用vector存储一些整数。 ```c++ #include <iostream> #include <vector> using namespace std; int main() { vector<int> vec; // 添加数据 vec.push_back(1); vec.push_back(2); vec.push_back(3); // 输出数据 for (int i = 0; i < vec.size(); i++) { cout << vec[i] << " "; } cout << endl; return 0; } ``` 输出结果为: ``` 1 2 3 ``` 2. 使用list容器存储数据 list是一个双向链表,可以在任意位置进行插入和删除操作。以下是一个例子,演示如何使用list存储一些字符串。 ```c++ #include <iostream> #include <list> using namespace std; int main() { list<string> lst; // 添加数据 lst.push_back("hello"); lst.push_back("world"); lst.push_front("hello"); // 输出数据 for (list<string>::iterator it = lst.begin(); it != lst.end(); it++) { cout << *it << " "; } cout << endl; return 0; } ``` 输出结果为: ``` hello hello world ``` 3. 使用map容器存储数据 map是一个关联数组,可以根据键值进行数据的存储和查找。以下是一个例子,演示如何使用map存储一些学生的信息。 ```c++ #include <iostream> #include <map> using namespace std; int main() { map<string, int> m; // 添加数据 m["Tom"] = 90; m["Jerry"] = 80; m["Bob"] = 70; // 查找数据 cout << "Tom's score is " << m["Tom"] << endl; return 0; } ``` 输出结果为: ``` Tom's score is 90 ``` 以上是STL的一些应用实例,希望对你有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值