C++集合类实践:set的使用与数序操作

2星 需积分: 50 21 下载量 8 浏览量 更新于2024-09-20 收藏 58KB DOC 举报
"C++集合类的实现及应用,包括set类的基本操作,如添加、删除元素以及合并两个集合。" 在C++编程语言中,集合(set)是一种容器,它存储唯一对象的集合,这些对象是无序的并且不允许有重复元素。C++标准库中的`std::set`是一个关联容器,它实现了一个红黑树,可以快速地插入、删除和查找元素。 在C++中,我们可以自定义集合类来满足特定需求。例如,描述中的`numSet`类就是一个简单的有序整数集合,它的数据成员包括一个元素计数器`count`和一个大小为`MAX`的整数数组`a`来存储元素。这个类提供了以下功能: 1. 添加元素:`void addnum(int n)` 函数负责将一个整数`n`添加到集合中,同时确保元素的有序性和唯一性。通过遍历数组找到合适的位置插入新元素,如果元素已经存在,函数则不做任何处理。 2. 删除元素:`void delenum(int n)` 函数用于查找并删除指定的元素`n`。首先,它会在数组中搜索元素,找到后将其删除,并将后面的元素向前移动填补空位。 3. 构造函数:`numSet()` 初始化集合为空,元素计数器`count`设置为0。 4. 输出函数:`void disp()` 可以用来显示集合中的所有元素。 除了这些基本操作,还可以扩展集合类的功能,例如实现两个集合的合并。在示例中,通过友元函数`numSet unionset(numSet &s1, numSet &s2)`实现了合并两个集合`s1`和`s2`的功能。这个函数会创建一个新的集合`set3`,其中包含`s1`和`s2`的所有不同元素,保持有序。比较`s1`和`s2`的元素,将较小的元素添加到结果集合中,直到其中一个集合遍历完,然后将另一个集合剩余的元素全部添加。 例如,如果我们有两个集合`set1 = {1, 2, 3}`和`set2 = {2, 4, 5, 6}`,那么合并后的`set3`将是`{1, 2, 3, 4, 5, 6}`。 在实际编程中,`std::set`库提供了更多的操作,如迭代器、容量检查、查找、插入和删除等,它们通常比自定义集合类更高效和灵活。然而,对于教学和理解数据结构的基本概念,自定义集合类是很有帮助的。通过这样的实践,开发者能够更好地理解集合数据结构的工作原理,以及如何有效地管理元素的存储和操作。
2013-03-19 上传
大多时候,一些初学者不知道应该读什么书入门,有一定基础的开发者不知道如何进阶。本文总结了一个C++优秀书籍清单,希望能够为你带来一定的帮助。因为多读一些优秀的书籍,对于开发者稳固编程基础、提高编程技能有很大帮助,这些书大多数都有中文版,并且可以很容易在网上找到。 阶段1 《Essential C++》 这是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C++编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。 《C++ Primer》 本书对C++基本概念、技术、以及现代C++编程风格进行了全面而且权威的阐述,是C++初学者的最佳指南;本书可以帮助你编写实用的程序,而无需首先精通每个语言细节。对于中高级程序员,本书也是不可或缺的参考书。 阶段2 《Effective C++》和《More effective C++》 作者是Scott Meyers.你应该熟读它们,并清楚地理解每个项目。该书围绕55条准则,每一条都介绍了一个可让你写出更好的C++程序代码的方法,并以特别设计过的例子详加讨论。 《Exceptional C++(C++编程剖析)》和《More exceptional C++》 这两本书中都包含了40个C++编程问题,这些问题会让你磨练自己的技能,最终成为优秀的C++程序员。这些问题是Herb Sutter精心挑选,与ISO/ANSI C++官方标准相一致,帮助程序员在设计、架构和编码过程中保持良好的风格,从而使编写的C++软件更健壮、更高效。 《Thinking in C++(C++编程思想)》 C++ 领域权威着作,介绍了C++实用的编程技术和最佳的实践方法。 阶段3 《Inside the C++ object model(深度探索C++对象模型)》 本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承,帮助你理解程序的底层实现,以便写出更高效的代码。 《The design and evolution of C++(C++语言的设计与演化)》 本书作者也是C++语言的设计者Bjarne Stroustrup,作者在书中综合性地介绍了C++的发展历史,C++中各种重要机制的本质意义和设计背景,这些机制的基本用途和使用方法,讨论了C++所适合的应用领域及其未来的发展前景,既没有忽略关键性的详情,又没有过多地陷入技术细节。 阶段4 《The C++ standard library(C++标准程序库)》 这是标准模板库字典,你可以在本书中找到STL相关的一切知识。本书焦点放在标准模板库、检查容器、迭代器、函数对象和STL算法上。每一个元素都有深刻的呈现,包括其介绍、设计、运用实例、细节解说、陷阱、意想不到的危险,以及相关类别和函数等。 《Effective STL》 这是Scott Meyers的第三本C++专着,也是学习STL最权威的书籍。作者对书中的50个指导方针都作了详尽的分析,并配以示例。通过这些规则,C++开发者可以最大限度地使用STL. 《Generic programming and the STL(泛型编程与STL)》 本书阐述了泛型程序设计的核心理念:concepts(概念)、modeling(模型)和refinement(改善),并为你展示这些观念如何导出STL的基础概念:iterators(迭代器)、containers(容器)和function objects(函数对象)。按照本书所述,你可以把STL想象成一个由concepts组成的library,你将学习到STL正式结构并理解其强大的优势。 阶段5 《Exceptional C++ style》 作者为Herb Sutter.本书同样提出了40个C++风格相关的问题,对一些至关重要的C++细节和相互关系提出了新的见解,为当今的关键C++编程技术(如泛型编程、STL、异常安全等)提供了新的策略,帮助开发者在开销与功能之间、优雅与可维护性之间、灵活性与过分灵活之间寻找完美的平衡点。 《C++ template》 这是一本关于C++模板的完整的参考手册和教程,它强调模板的使用实践,包含了现实世界中的例子。每个C++程序员都应该好好读一读这本书。 《Modern C++ design(现代C++设计)》 作者Andrei Alexandrescu为C++程序员打开了一个新的局面。本书提供了一些针对软件设计的前沿方法,如联合设计模式、泛型编程,使程序员可以编写有表现力的、灵活的、高度可重用的代码。