一. 命名空间(Namespace)
与STL相关的概念是命名空间(namespace)。STL定义在std命名空间中。有3种方法声明使用的命名空间:
1.用using关键字使用这个命名空间,在文件的顶部,但在声明的头文件下面加入: using namespace std;
这对单个工程来说是最简单也是最好的方法,这个方法可以把你的代码限定在std命名空间中。
2.使用每一个模板前对每一个要使用的对象进行声明(就像原形化):
using std::cout;
using std::endl;
using std::flush;
using std::set;
using std::inserter;
尽管这样写有些冗长,但可以对记忆使用的函数比较有利,并且你可以容易地声明并使用其他命名空间中的成员。
3.在每一次使用std命名空间中的模版时,使用std域标识符。比如:
typedef std::vector VEC_STR;
这种方法虽然写起来比较冗长,但是是在混合使用多个命名空间时的最好方法。一些STL的狂热者一直使用这种方法,并且把不使用这种方法的人视为异类。一些人会通过这种方法建立一些宏来简化问题。
除此之外,你可以把using namespace std加入到任何域中,比如可以加入到函数的头部或一个控制循环体中。
二.
需要注意的是,你必须确保在两个尖括号之间或尖括号和名字之间用空格隔开,因为是为了避免同“>>&rdquo移位运算符混淆。比如
vector <list<int>> veclis;
这样写会报错,而这样写:
vector <list <int> > veclis;
就可以避免错误。
三.
set(集合)
一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集合中的元素按一定的顺序排列,并被作为集合中的实例。如果你需要一个键/值对(pair)来存储数据,map是一个更好的选择。一个集合通过一个链表来组织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。
在STL中出现的7种容器:
vector(向量)——STL中标准而安全的数组。只能在vector 的“前面”增加数据。
deque(双端队列double-ended queue)——在功能上和vector相似,但是可以在前后两端向其中添加数据。
list(列表)——游标一次只可以移动一步。如果你对链表已经很熟悉,那么STL中的list则是一个双向链表(每个节点有指向前驱和指向后继的两个指针)。
set(集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的。
map(映射)——经过排序了的二元组的集合,map中的每个元素都是由两个值组成,其中的key(键值,一个map中的键值必须是唯一的)是在排序或搜索时使用,它的值可以在容器中重新获取;而另一个值是该元素关联的数值。比如,除了可以ar[43] = "overripe"这样找到一个数据,map还可以通过ar["banana"] = "overripe"这样的方法找到一个数据。如果你想获得其中的元素信息,通过输入元素的全名就可以轻松实现。
multiset(多重集)——和集合(set)相似,然而其中的值不要求必须是唯一的(即可以有重复)。
multimap(多重映射)——和映射(map)相似,然而其中的键值不要求必须是唯一的(即可以有重复)。
如果你阅读微软的帮助文档,你会遇到对每种容器的效率的陈述。比如:log(n*n)的插入时间。除非你要处理大量的数据,否则这些时间的影响是可以忽略的。如果你发现你的程序有明显的滞后感或者需要处理时间攸关(time critical)的事情,你可以去了解更多有关各种容器运行效率的话题。
游标(Iterator) 迭代器
游标是指针,但不仅仅是指针。游标和指针很像,功能很像指针,但是实际上,游标是通过重载一元的”*”和”->”来从容器中间接地返回一个值。将这些值存储在容器中并不是一个好主意,因为每当一个新值添加到容器中或者有一个值从容器中删除,这些值就会失效。在某种程度上,游标可以看作是句柄(handle)。通常情况下游标(iterator)的类型可以有所变化,这样容器也会有几种不同方式的转变:
iterator——对于除了vector以外的其他任何容器,你可以通过这种游标在一次操作中在容器中朝向前的方向走一步。这意味着对于这种游标你只能使用“++”操作符。而不能使用“--”或“+=”操作符。而对于vector这一种容器,你可以使用“+=”、“—”、“++”、“-=”中的任何一种操作符和“<”、“<=”、“>”、“>=”、“==”、“!=”等比较运算符。
reverse_iterator ——如果你想用向后的方向而不是向前的方向的游标来遍历除vector之外的容器中的元素,你可以使用reverse_iterator 来反转遍历的方向,你还可以用rbegin()来代替begin(),用rend()代替end(),而此时的“++”操作符会朝向后的方向遍历。
const_iterator ——一个向前方向的游标,它返回一个常数值。你可以使用这种类型的游标来指向一个只读的值。
const_reverse_iterator ——一个朝反方向遍历的游标,它返回一个常数值。
分享到:
相关推荐
在"STL学习教程word版"中,初学者可以深入理解STL的核心概念和应用。STL的核心是它的四大组件: 1. **容器**:容器是STL的基础,它们存储和管理元素集合。常见的容器有vector(动态数组)、list(双向链表)、deque...
在进行STL学习和使用时,需要注意一些细节和技巧。例如,在使用vector时,要区分清楚end()和end() + 1的区别。end()返回的是最后一个元素的迭代器,而end() + 1返回的是最后一个元素下一个位置的迭代器,它实际上...
### STL学习总结:掌握C++的强大工具箱 #### 引言 STL,全称Standard Template Library,中文译为标准模板库,是C++标准库的重要组成部分,它由Stepanov and Lee等人最早开发,旨在提供一系列高效且类型安全的组件...
根据提供的文件信息,标题与描述均提到了“c.STL 学习c语言的必看”,这表明文章的主题是关于C++标准模板库(STL)在C语言学习中的重要性,尽管C语言本身并不支持STL,但此处应当理解为C++语言的学习资料。...
### STL学习文档知识点详解 #### 一、STL简介与重要性 STL(Standard Template Library,标准模板库)是C++编程语言中一个非常重要的组成部分,它为开发者提供了大量高效且灵活的数据结构和算法。对于任何一位C++...
STL学习都是些基础的知识,适合初学者了解下STL。
STL的学习文档则会深入讲解STL的核心组件,包括容器(如vector、list、deque、set和map)、迭代器、算法(如排序、查找和转换)以及仿函数(functors)。STL容器提供了一种存储和组织数据的方式,而迭代器则允许...
### C++ STL 学习经典知识点详解 #### 一、STL概述 C++ Standard Template Library (STL) 是 C++ 标准库的一部分,它提供了一组强大的工具,简化了程序员开发过程中对于数据结构和算法的操作。STL 的设计哲学强调了...
《设计模式与STL学习详解》一书深入探讨了软件工程中的两个核心概念:设计模式与标准模板库(STL)。此书不仅为读者提供了理论基础,还通过丰富的实例解析,帮助读者理解如何将这些理论应用于实际编程中,特别是在...
STL的学习不仅仅是理解这些基本概念,还包括深入理解其内部实现机制,例如容器如何管理内存,迭代器如何工作,以及算法的效率分析等。通过实践和应用,开发者可以更好地利用STL提高代码的效率和可读性。
STL的学习不仅仅是掌握每个组件的基本用法,更重要的是理解其背后的泛型编程思想和设计模式,这将有助于写出更加高效、可维护的C++代码。对于C++程序员来说,熟练掌握STL是成为高手的重要一步,因为STL的使用能显著...
这个压缩包中包含的资料是关于STL学习的宝贵资源,涵盖了STL的基础概念、深入解析、实践应用等多个方面。下面将对这些文件进行详细解读。 1. **Effetive+STL.doc**:这可能是一份关于《Effective STL》的文档,作者...
STL学习总结,介绍STL函数,容器的用法
学习STL不仅仅是学习它提供的各个组件,更重要的是理解这些组件如何协同工作,并将这些组件应用到实际的编程问题解决中去。通过对STL的学习,可以提高数据结构和算法的使用效率,编写更加简洁、高效和安全的代码。...
这篇学习笔记将深入探讨STL的核心概念、主要组件以及其在实际编程中的应用。 首先,STL的核心概念是容器、迭代器、算法和函数对象。容器是STL提供的一系列数据结构,如vector(动态数组)、list(双向链表)、set...
根据给定的信息,我们可以深入探讨STL(Standard Template Library,标准模板库)中的几个关键概念与函数用法。STL是C++中的一个重要组成部分,它提供了丰富的数据结构和算法,可以极大提高编程效率。 ### STL简介 ...
标题"使用STL学习数据结构"意味着本书将深入讲解如何利用STL来实现和理解各种数据结构。STL包括容器(如vector、list、set、map等)、迭代器、函数对象(functors)以及算法库。通过STL,开发者可以轻松地操作和管理...
Josuttis撰写,是STL学习者的权威参考书。它不仅涵盖了STL的基本内容,还涉及了C++标准库的其他部分,如智能指针、I/O流和异常处理。这本书的详细程度非常高,对于STL的每个组件,它都提供了丰富的例子和深入的理论...
《Effective STL 学习标准模板库》是一本针对C++程序员深入理解和高效使用STL(Standard Template Library,标准模板库)的指南。作者Scott Meyers在书中提出了50个有效的实践建议,旨在帮助开发者克服STL在实际应用...
STL学习过程中的代码笔记。在学习STL(标准模板库)的过程中,我发现了许多方便且强大的代码技巧。其中,容器是STL中最常用的部分之一。使用容器可以方便地存储和管理数据,例如使用vector动态数组来存储元素,使用...