C++编程:探索Sets集合的使用与功能

需积分: 49 8 下载量 123 浏览量 更新于2024-09-16 收藏 24KB DOC 举报
"C++ 集合 set 例子" C++ 中的集合(set)是一种关联容器,它存储唯一对象的集合,并自动对这些对象进行排序。set 的实现基于自平衡二叉查找树(通常为红黑树),这使得在集合中插入、删除和查找元素的时间复杂度为 O(log n),其中 n 是集合中元素的数量。集合不允许有重复元素,且元素的顺序是确定的,即插入时的顺序可能会被调整以便保持排序。 集合提供了多种操作方法,包括: 1. `begin()` 和 `end()`: 分别返回指向集合中第一个和最后一个元素的迭代器。`end()` 指向超出最后一个元素的位置,而不是元素本身。 2. `clear()`: 清除集合中的所有元素。 3. `count()`: 返回集合中具有特定值的元素数量。 4. `empty()`: 如果集合为空,返回 `true`,否则返回 `false`。 5. `equal_range()`: 返回一个范围,包含所有与给定值相等的元素的迭代器对。 6. `erase()`: 删除集合中指定位置或特定值的元素。 7. `find()`: 查找给定值的元素,返回指向该元素的迭代器。 8. `get_allocator()`: 返回集合使用的分配器对象。 9. `insert()`: 在集合中插入新的元素。 10. `lower_bound()`: 返回大于或等于给定值的第一个元素的迭代器。 11. `key_comp()`: 返回用于比较元素之间值的函数对象。 12. `max_size()`: 返回集合能够容纳的最大元素数量。 13. `rbegin()` 和 `rend()`: 分别返回反向迭代器,表示从集合末尾到开头的迭代。 14. `size()`: 返回集合中元素的数量。 15. `swap()`: 交换两个集合的内容。 16. `upper_bound()`: 返回大于给定值的第一个元素的迭代器。 17. `value_comp()`: 返回用于比较元素值的函数对象。 构造函数方面,集合有以下几种创建方式: 1. `explicit set(const Pred& comp = Pred(), const A& al = A())`: 创建一个空集合,可选地指定比较函数(默认为 `std::less<key_type>`)和分配器。 2. `set(const set& x)`: 复制构造函数,创建与另一个集合相同的新集合。 3. `set(const value_type* first, const value_type* last, const Pred& comp = Pred(), const A& al = A())`: 使用指定范围的元素初始化集合,同样可选地指定比较函数和分配器。 实际应用中,可以按照以下方式创建 set 对象: 1. `set<int> c;`: 创建一个空的整数集合。 2. `set<string> c(std::less<string>(), myAllocator);`: 创建一个字符串集合,使用自定义的比较函数和分配器。 3. `set<int> c(otherSet);`: 通过另一个集合复制创建一个新的集合。 4. `set<char> c('a', 'z');`: 用字符范围 ('a' 到 'z') 初始化集合。 集合在处理唯一对象并需要保持排序的场景下非常有用,例如在数据库索引、数学集合操作或需要快速查找唯一元素的应用中。需要注意的是,集合中的元素必须具备可比较性,这意味着它们的类型需要支持比较操作(通常是通过 `<` 运算符)。对于自定义类型,需要提供相应的比较函数或重载比较运算符。
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++程序员打开了一个新的局面。本书提供了一些针对软件设计的前沿方法,如联合设计模式、泛型编程,使程序员可以编写有表现力的、灵活的、高度可重用的代码。