通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
资源搜索:
热门搜索:Linux VB C语言 PhotoShop Flash TCP/IP
   首页 | 文章 | 软件 | 动画 | 资源 | 励志 | 骗术 | 论坛 | 邮箱 | 会员中心 | 军事 | 科技 | 博客 | 图片 | 商城 | 最新更新 | 800g资源 | 爱心黑客
您现在的位置: 爱国者黑客 >> 资源 >> 程序设计 >> C#语言 >> 数据库编程 >> 文章正文
标准模板库介绍
责任编辑:ncic   更新日期:2007-4-2

  标准模板库,也叫 STL,是一个 C++ 容器类库,算法和迭代器。他提供许多 基本算法,数据结构。STL 是一个通用库,即可以充份定制:几乎所有的 STL 组件都是模板。在你使用 STL 前,你必须了解模板的工作情况。

  容器和算法

  和许多类库一样,STL 包含容器类 - 可以包含其他对象的类。STL 包含向量 类,链表类,双向队列类,集合类,图类,等等。他们中的每个类都是模板,能包含 各种类型的对象。例如,你可以用 vector<int> ,就象常规的 C 语 言中的数组,除了 vector 不要你象数组那样考虑到动态内存分配的问题。

vector<int> v(3); // 定义一个有三个元素的向量类
v[0] = 7;
v[1] = v[0] + 3;
v[2] = v[0] + v[1]; // v[0] == 7, v[1] == 10, v[2] == 17

  STL 还包含了大量的算法。他们巧妙地处理储存在容器中的数据。你能够颠倒 vector 中的元素,只是简单使用 reverse 算法。

  reverse(v.begin(), v.end()); // v[0] == 17, v[1] == 10, v[2] == 7

  在调用 reverse 的时候有两点要注意。首先,他是个全局函数,而不是成员 函数。其次,他有两个参数,而不是一个:他操作一定范围的元素而不是操作容器。 在这个例子中他正好是对整个容器 V 操作。

  以上两点的原因是相同的:reverse 和其他 STL 算法一样,他们是通用的,也就 是说, reverse 不仅可以用来颠倒向量的元素,也可以颠倒链表中元素的顺序。 甚至可以对数组操作。下面的程序是合法的。

double A[6] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7 };
reverse(A, A + 6);
for (int i = 0; i < 6; ++i)
cout << "A[" << i << "] = " << A[i];

  这个例子也用到了范围,和我们上面的向量的例子一样:第一个参数是指向要操作的 范围的头的指针,第二个参数是指向尾的指针。在这里,范围是 [A, A + 6)。可能 你注意到范围的不对称。

  迭代器

  在上面的 C 数组的例子中,reverse 的参数类型是 double*。那么在 向量 或链表中参数又是什么呢?也就是说,究竟 reverse 是 如何定义参数的,并且 v.begin() 和 v.end() 返回什么?

  问题的答案是 reverse 的参数是 迭代器 (iterators)。他是指针的概括。 指针自己也是迭代器。这也是为什么可以颠倒数组中元素的顺序的原因。同样地,向量 定义了嵌套的类型 iterator 和 const_iterator。在上面的例子中, v.begin() 和 v.end() 返回的类型是 vector<int>::iterator。 还有一些迭代器,如 istream_iterator 和 ostream_iterator。他们根本不能和容器关联。

  • 上一篇文章:
  • 下一篇文章:
  • 热门文章
    Olldbg常见问题
    汇编语言的艺术(组合语言的艺术)--观
    汇编语言的艺术(组合语言的艺术)--准
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言---程式设计 (4)
    虚拟8086模式
    SYS命令使用说明
    javascript + CSS 实现动态菜单显
    推荐文章
    自制Windows XP SP2自动安装光盘
    SQLServer注入工具改进版 v1.02
    使用photoshop CS进行自然美肤
    Photoshop绘制诺基亚手机
    PHOTOSHOP制作秋日之梦
    PHOTOSHOP鼠绘名模王爱萍
    Photoshop制作晶莹飞溅的水珠
    教你用PHOTOSHOP做放大镜
    鼠绘美女及服装修画全过程