STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。 从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。...
它的数据类型是 vector<int> 定义的 iterator 类型。每一个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义同样。 begin 和 end 操作 每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。假设容器中有元素的话。由 begin 返回的迭代器指向第一个元素: ...
std::map<std::string, std::string>::iterator it = m.begin(); while (it != m.end()) { //... } return 0; } std::map::iterator 是一个类型,但是该类型太长了,特别容易写错;可能聪明的同学可能已经想到:我们可以通过 typedef 给类型取别名,比如: #include <string> #include typedef std:...
抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。具体迭代器(Concrete lterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。14.3 实现 14.4 总结其主要优点如下: 访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务...
1template<typename C>//typename allowed (as is “class”)2voidf(constC& container,//typename not allowed3typename C::iterator iter);//typename required C不是内嵌依赖类型名字(它没有内嵌在任何依赖于模板参数的东西中),所以在声明容器的时候不应该加typename,但是C::iterator是一个内嵌依赖类型名字,所...
C语言提供的另一种浮点类型是double(意为双精度)。 double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字。一般情况下,double占用64位而不是32位。一些系统将多出的 32 位全部用来表示非指数部分,这不仅增加了有效数字的位数(即提高了精度),而且还减少了舍入误差。另一些系统把其中的一些位分配...
查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员,分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator. int nFindKey = 2; //要查找的Key //定义一个条目变量(实际是指针) UDT_MAP_INT_CSTRING::iterator it= enumMap...
STL中实际上还有第三个构件 --- 迭代子(Iterator)。迭代子是指针似的对象,它让STL算法和容器共同工作。STL 是标准库中最具创新的部分,这并不是因为它提供了容器和算法(虽然它们非常有用),而是因为它的体系结构。简单来说,它的体系结构具有扩展性:可以对 STL进行添加。当然,标准库中的组件本身是固定的,但如果遵...
这是C语言的格式输出,%c,%y这些代表你要输出的数据的数据类型;%d 表示输出十进制有符号的整数。1、%u 十进制无符号整数。2、%f 表示输出浮点数。3、%s表示输出 字符串。4、%c表示输出单个字符。5、%p表示输出指针的值。6、%e表示输出指数形式的浮点数。7、%x, %X 表示输出无符号以十六进制表示...