当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>尺度模板库介绍</b>[VC/C++编程]

赞助商链接



  本文“<b>尺度模板库介绍</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

尺度模板库,也叫 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.他们根本不能和容器关联.

迭代器的呈现让算法和容器的别离成为大概.算法是模板,其范例依靠于迭代器,因此不会局 限于单一的容器.比方,我们写个算法实目前一定范围的线性查找.下面就是 STL 的 find 算法.

template <class InputIterator, class T>
InputIterator find(InputIterator first, InputIterator last, const T& value) {
while (first != last && *first != value) ++first;
return first;
}

 Find 有三个参数:两个迭代器定义范围,第三个是要查找的值.他遍历范围 [first, last),重新到尾的处理,在找到后终止或到范围的最后终止.

First 和 last 定义为 InputIterator 范例, 而 InputIterator 是个模板参数.也就是说,实际上没有一个真实的范例 InputIterator:当你调用 find 时,编译器用实际的范例 去匹配 InputIterator 和 T.假如 find 的两个参数 中第一个实现是 int*,第三个实现是 int,那么你可以认为是在履行 下面的函数.

int* find(int* first, int* last, const int& value) {
while (first != last && *first != value) ++first;
return first;
}


  以上是“<b>尺度模板库介绍</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .