后台开发:核心技术与应用实践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的角度分析并解决这类问题。

相关文章
|
7月前
|
架构师 测试技术 API
深入浅出聊一聊自动化架构!
深入浅出聊一聊自动化架构!
118 1
|
6月前
|
运维 监控 安全
Go语言学习路线 - 7.进阶篇:一名软件工程师的价值沉淀
通过前面几讲的分享,相信大家已经能清楚地看到一名普通软件工程师的发展路线:不断学习技能,提高研发效能,实现业务功能。 如果我们尝试回头看,可能会对自己的定位存在疑问:这些日常CRUD的开发工作,很多不具备太高的技术难度,可以靠人力堆积来实现。那么,如何在研发团队里打造自己的技术壁垒、体现个人价值呢?
42 0
|
9月前
|
移动开发 前端开发 Java
|
SQL 前端开发 Oracle
PHP开发总监的知识体系是什么?底层原理是什么?
PHP开发总监的知识体系是什么?底层原理是什么?
|
存储 算法 Java
数据结构与算法- 基础理念
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,用S(n)=O(f(n))
46 0
|
SQL 缓存 监控
SSM框架源码分析:助你深入理解底层原理,提高核心竞争力
众所周知SSM源码分析教程里面包括Mybatis、Spring以及SpringMVC这三个经典的开源框架的源码分析。我们编程人员技术提升逃不过的一个重要方式就是阅读和理解优秀开源项目的源码,通过阅读和理解优秀开源项目的源码掌握开源项目它底层是如何实现的,领悟大师级的设计思想,开阔自己的视野。在自己实践开发中可以借鉴和参考,以提升自己的(拍晕面试官)阅读复杂代码的能力,以及修炼自我的编码功底。 本套课程就是带你去阅读Mybatis、Spring以及SpringMVC这三个开源框架的源码,掌握这些开源框架的底层原理、执行流程以及它是如何实现的,让你对这些开源框架不再是停留在如何使用的层面,来提高自
172 0
|
SQL Java 程序员
独家下载!《Java开发手册》灵魂13问,深度剖析一线大厂开发思维
《〈Java开发手册(泰山版)〉灵魂13问》独家首发!全网千万阅读量技术博主深度剖析Java规约背后的原理,从“问题重现”到“原理分析”再到“问题解决”,下载《Java开发手册》必备的伴读书目!
248898 2
独家下载!《Java开发手册》灵魂13问,深度剖析一线大厂开发思维