后台开发:核心技术与应用实践3.1 STL是什么
第3章
常用STL的使用
3.1 STL是什么
当今时代是一个信息时代,科技的发展所带来的便利影响了人们生活中的每个细节,STL就是这个时代组件化大生产的产物。正如其他科技成果一样,C++程序员也应该努力使自己适应并充分利用这个“高科技成果”。
STL是一个标准模板库,是一个高效的C++程序库。接下来将以一个实例程序为例,逐步介绍STL的内容与功能。
假设需要从标准输入(一般是键盘)读入一些整型数据,再对它们排序,然后将结果输出到标准输出设备(一般是显示器屏幕),那程序可以如例3.1所示。
【例3.1】 用原始的方式将一些数据进行排序。
#include<iostream>
#include<stdlib.h>
using namespace std;
#define max_size 10
// 比较两个数的大小
// 如果比较函数返回大于0,qsort就认为a>b
// 如果比较函数返回等于0,qsort就认为a=b
// 如果比较函数返回小于0,qsort就认为a<b
int cmp(const void *a,const void *b){
return *(int *)a-*(int *)b;
}
int main(){
int arr[max_size];
int n=0;
// 从标准输入设备中读入整数,同时累计输入个数,直到输入的是非整型数据为止
for(;;n++){
cin>>arr[n];
}
qsort(arr,n,sizeof(int),cmp);
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
return 0;
}
以下是某次运行的结果:
输入:0 9 2 1 5
输出:0 1 2 5 9
例3.1中用了一个可以放10个整数的整型数组,来存放输入的数据,规定从标准输入设备中读入整数,同时累计输入个数,直到输入的是非整型数据为止;还用了C标准库的快速排序quit-sort函数来对输入的整数进行排序,并将排序结果输出到标准输出设备上。
然而,这个程序并不像看起来那么健壮(robust)。如果用户输入的数字数超过max_size所规定的上限,就会出现数组越界问题。为了弥补程序中的这一缺陷,必须采用下述方案中的一种。
(1)采用大容量的静态数据分配。
(2)限定输入的数据个数。
(3)采用动态内存分配。
第一种方案比较简单,所做的只是将max_size改大一点,比如1000或者10?000。但是,严格讲这并不能最终解决问题,隐患仍然存在。此外,分配一个大数组,通常是在浪费空间,因为大多数情况下,数组中的一部分空间并没有被利用。
再来看看第二种方案,通过在第一个for循环中加入一个限定条件,可以使问题得到解决。比如:for (int n = 0; cin >> num[n] && n < max_size; n ++);但是这个方案同样不甚理想,尽管不会使程序崩溃,但失去了灵活性,使用户无法输入更多的数。
看来只有选择第三种方案了,利用指针以及动态内存分配可以妥善解决上述问题,并且使程序具有良好的灵活性。这需要用到new、delete操作符,或者malloc(),realloc()和free()函数,但是为此,程序将牺牲其简洁性,使代码量陡增,代码的处理逻辑也不再像原先看起来那么清晰了。很难保证不会在处理这个问题的时候出错,很多程序的bug往往就是这样产生的。同时,stdlib.h库提供了quit-sort函数,避免了自己实现排序算法的麻烦。总之,需要考虑的问题越来越多。
接下来就将从STL的角度分析并解决这类问题。
相关文章
- LibreOffice 7.5 发布:漂亮的新应用图标和酷炫功能
- elementary OS 7 发布
- Windows 应用兼容层 Wine 8.1 发布:默认启用“Windows 10”前缀
- 微软正测试新功能:当 Windows 11 有新的小组件可用时会提醒通知
- 解析分布式存储选型和应用九个典型问题
- ClickHouse在自助行为分析场景的实践应用
- Chrome DevTools 远程调试安卓网页的原理
- Uni-app + Vue3 页面如何跳转及传参?
- 微软证实系统还原点会损坏 Windows 11 22H2 版本应用程序
- 巧用 Transition 实现短视频 APP 点赞动画
- 初学者试试,HarmonyOS应用开发者基础认证
- 媒体实测微软 Windows 开发工具包 2023:存在不兼容 HDR 显示器、某些应用无法运行等问题
- 快速了解Navigator API SetAppBadge
- 微软 Windows 11 Dev 预览版 Build 25276 发布,应用兼容问题对话框 UI 改进
- 基于Next.js、Prisma、Postgres和Fastfy构建全栈APP
- 开始菜单搜索框变圆角,微软 Windows 11 Beta 预览版 22621.1095 和 22623.1095 发布
- 2022-2023 十大应用开发趋势
- 观远数据发布业内首部《移动BI白皮书》,深入业务数字化场景重新定义移动BI
- Windows 10 学院:不借助第三方工具如何卸载 Windows 10 预装应用
- 正处高质量发展期,我国大数据产业突破1.3万亿元