`
gstarwd
  • 浏览: 1536510 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

STL和C++标准函数库(vector用法)

阅读更多
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;

int main(void)
{
vector<int> num;   // STL中的vector容器
int element;

// 从标准输入设备读入整数, 
// 直到输入的是非整型数据为止
while (cin >> element)     //ctrl+Z 结束输入 
   num.push_back(element);

// STL中的排序算法
sort(num.begin(), num.end());

// 将排序结果输出到标准输出设备
for (int i = 0; i < num.size(); i ++)
   cout << num[i] << "\n";
   system("pause");
   return 0;
}

 

这个程序的主要部分改用了STL的部件,看起来要比第一个程序简洁一点,你已经找不到那个讨厌的compare函数了。它真的能很好的运行吗?你可以试试,因为程序的运行结果和前面的大致差不多,所以在此略去。我可以向你保证,这个程序是足够健壮的。不过,可能你还没有完全看明白程序的代码,所以我需要为你解释一下。毕竟,这个戏法变得太快了,较之第一个程序,一眨眼的功夫,那些老的C++程序员所熟悉的代码都不见了,取而代之的是一些新鲜玩意儿。

程序的前三行是包含的头文件,它们提供了程序所要用到的所有C++特性(包括输入输出处理,STL中的容器和算法)。不必在意那个.h,并不是我的疏忽,程序保证可以编译通过,只要你的C++编译器支持标准C++规范的相关部分。你只需要把它们看作是一些普通的C++头文件就可以了。事实上,也正是如此,如果你对这个变化细节感兴趣的化,可以留意一下你身旁的佐餐。

同样可以忽略第四行的存在。加入那个声明只是为了表明程序引用到了std这个标准名字空间(namespace),因为STL中的那些玩意儿全都包含在那里面。只有通过这行声明,编译器才能允许你使用那些有趣的特性。

程序中用到了vector,它是STL中的一个标准容器,可以用来存放一些元素。你可以把vector理解为int [?],一个整型的数组。之所以大小未知是因为,vector是一个可以动态调整大小的容器,当容器已满时,如果再放入元素则vector会悄悄扩大自己的容量。push_back是vector容器的一个类属成员函数,用来在容器尾端插入一个元素。main函数中第一个while循环做的事情就是不断向vector容器尾端插入整型数据,同时自动维护容器空间的大小。

sort是STL中的标准算法,用来对容器中的元素进行排序。它需要两个参数用来决定容器中哪个范围内的元素可以用来排序。这里用到了vector的另两个类属成员函数。begin()用以指向vector的首端,而end()则指向vector的末端。这里有两个问题,begin()和end()的返回值是什么?这涉及到STL的另一个重要部件--迭代器(Iterator),不过这里并不需要对它做详细了解。你只需要把它当作是一个指针就可以了,一个指向整型数据的指针。相应的sort函数声明也可以看作是void sort(int* first, int* last),尽管这实际上很不精确。另一个问题是和end()函数有关,尽管前面说它的返回值指向vector的末端,但这种说法不能算正确。事实上,它的返回值所指向的是vector中最末端元素的后面一个位置,即所谓pass-the-end value。这听起来有点费解,不过不必在意,这里只是稍带一提。总的来说,sort函数所做的事情是对那个准整型数组中的元素进行排序,一如第一个程序中的那个qsort,不过比起qsort来,sort似乎要简单了许多。

程序的最后是输出部分,在这里vector完全可以以假乱真了,它所提供的对元素的访问方式简直和普通的C++内建数组一模一样。那个size函数用来返回vector中的元素个数,就相当于第一个程序中的变量n。这两行代码直观的不用我再多解释了。

我想我的耐心讲解应该可以使你大致看懂上面的程序了,事实上STL的运用使程序的逻辑更加清晰,使代码更易于阅读。试问,有谁会不明白begin、end、size这样的字眼所表达的含义呢(除非他不懂英语)?试着运行一下,看看效果。再试着多输入几个数,看看是否会发生数组越界现象。实践证明,程序运行良好。是的,由于vector容器自行维护了自身的大小,C++程序员就不用操心动态内存分配了,指针的错误使用毕竟会带来很多麻烦,同时程序也会变得冗长无比。

分享到:
评论

相关推荐

    STL与C++标准函数库

    STL,全称为Standard Template Library,是C++标准库中的一个重要子集,占据了大约80%的库内容。STL的出现极大地提升了C++程序员的开发效率,它以模板为基础,提供了一系列高效的数据结构(容器)和算法。下面将详细...

    C C++标准函数库和模板库

    在学习C/C++标准函数库和模板库时,理解每个函数和容器的使用方法、参数及返回值是非常关键的。同时,掌握如何结合使用这些工具来解决问题,比如如何使用STL容器和算法解决实际的编程问题,以及如何利用模板实现泛型...

    C++标准函数库 C++标准函数库

    C++标准函数库是C++编程语言不可或缺的一部分,它提供了大量的预定义函数和类,极大地丰富了程序员的工具箱,使得代码编写更加高效且可读性强。这些库分为多个部分,包括输入/输出(I/O)、算法、容器、迭代器、数值...

    C++标准函数库(中文版和英文版)

    C++标准函数库是C++编程语言不可或缺的一部分,它包含了大量预先定义的函数和类,为程序员提供了丰富的功能,从基本的数据操作到复杂的算法实现。本资源提供了C++标准函数库的英文版和中文版帮助文档,对于学习和...

    The C++ standard Library C++ 标准函数库

    在《C++标准函数库:教程与参考》一书中,作者详细介绍了这个库的使用方法,并且通过示例代码来展示这些函数、数据结构和算法的实际应用。 首先,我们需要了解C++标准函数库的历史。C++标准函数库并不是从一开始就...

    c++标准库STL手册

    C++标准模板库(STL)是C++编程语言中的一个重要组成部分,它提供了一组高效、可重用的容器、迭代器、算法和函数对象,大大简化了数据结构和算法的实现。STL手册通常会详细阐述这些组件的使用方法,提供实例代码,...

    《C++语言 - 标准模板库STL》_标准模板库_C++_C++STL_

    在C++编程中,标准模板库(Standard Template Library,简称STL)是一个极其重要的组成部分,它为程序员提供了高效且易用的数据结构和算法。STL是C++标准库的一个核心部分,极大地提升了代码的可读性和复用性,使得...

    c/c++标准函数库查询中文版

    这个“C/C++标准函数库查询中文版”显然是为了帮助程序员更便捷地理解和使用这些功能。 在C语言中,标准库主要由ANSI C(C89/C99)和C11标准定义,包括、、、等头文件,其中包含的函数如printf()用于格式化输出,...

    【STL源代码】C++标准库STL源代码下载

    STL,全称为Standard Template Library,是C++标准库的核心部分,它提供了一组高效、通用的容器、迭代器、算法和函数对象。在【STL源代码】中,我们可以深入学习并理解这些组件的实现细节,从而提高编程技能和效率。...

    C++模板与STL库介绍

    STL是C++标准库的一部分,包含了一系列高效的数据结构和算法,如容器、迭代器、算法和函数对象。主要的容器有: 1. **向量(Vector)**:动态数组,支持随机访问和高效插入/删除尾部元素。 2. **列表(List)**:双向...

    C++_标准模板库(STL) pdf 高清版

    C++标准模板库(STL)是C++编程语言中不可或缺的一部分,它为开发者提供了大量高效、可重用的容器、算法和迭代器。STL的主要目标是提高代码的效率和可读性,通过使用泛型编程(也称为模板编程)来实现。以下是关于...

    STL_C++标准程序库_侯杰_BIG5

    STL(Standard Template Library,标准模板库)是C++编程语言中不可或缺的一部分,它提供了一组高效、可重用的容器、迭代器、算法和函数对象,极大地提升了C++的编程效率和代码质量。 1. **STL基本概念** STL的...

    C++库函数及STL算法

    在C++编程中,库函数和STL(Standard Template Library,标准模板库)是不可或缺的组成部分,它们极大地提升了代码的效率和可读性。本文将深入探讨C++库函数和STL算法,以及如何在实际编程中应用这些概念。 首先,...

    c++ STL标准库

    C++ STL(Standard Template Library,标准模板库)是C++编程语言中不可或缺的一部分,它提供了一组高效且灵活的容器、算法和迭代器,极大地提高了程序员的生产力。STL的核心概念是泛型编程,它允许编写与具体数据...

    C++标准函数库

    C++标准库手册(英文版).chm 和 C++标准函数库(中文版).chm 这两个文档资源分别提供了英文和中文的详细指南,帮助开发者深入理解和使用C++标准库。下面将对其中的一些关键组成部分进行详细介绍: 1. **STL...

    C++17 STL标准库学习教材电子.pdf

    C++17 STL标准库的学习教材主要关注C++17引入的新特性,这些特性极大地提升了C++语言的可读性、可维护性和表达性。在本章中,我们将重点讨论结构化绑定这一新特性,它是C++17的一个重要亮点。 结构化绑定允许程序员...

    boost-STL.rar_Boost_C++标准库_STL_c 标准库_chm

    Boost.STL是Boost库的一个重要组成部分,它是对C++标准库STL(Standard Template Library)的扩展和增强,旨在提供更高效、功能更丰富的容器、迭代器、算法和函数对象。Boost库本身是一个开源的C++库集合,其目标是...

    c++标准函数库

    C++标准函数库,也被称为C++ Standard Library,是C++编程语言..."C++很全的标准函数库"这一资源,如"C&C++ Reference.chm",无疑是一个学习和查询C++标准库的宝贵资料,对于深入理解和使用C++编程语言具有极大的帮助。

    C++标准库(第2版)STL 源码

    STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术...在C++标准中,STL被组织为下面的13个头文件:、、、、&lt;vector&gt;、、、、、、、和。

    STL.zip_C++STL_C++标准库_C标准库_STL_welcomeuof

    C++ STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它为程序员提供了高效且灵活的容器、算法和迭代器等工具。STL的核心概念是泛型编程,允许代码对多种数据类型进行操作,...

Global site tag (gtag.js) - Google Analytics