STL容器和迭代器用法归纳(1)
来源:互联网 发布:2018高考倒计时软件 编辑:程序博客网 时间:2024/04/30 18:15
在我所看到的介绍STL的几本书和文章里。开头总要说STL能节省大量的时间和精力,但很多C++程序员确不知道,不会用,或不愿意用,因为觉得STL不好理解,不好用,复杂。可能也正如这些书中所说,我也经历过从不用到用的过程,而我身边也有人还没有使用STL。但其实只要我们需要存储信息,然后查询这些信息并使用,而且需要有一定形式的存储,并需要一定形式的获取这些存储的信息时,STL还真是一个不错的选择。因为它把一些常用的数据结构写成了很标准的模板。这样我们就不必自己再去实现一些数据结构了。
先说说容器。容器一个很形象的名称,就是一些用于存储数据集合的通用数据结构。 容器包括顺序容器(vector、deque、list),容器适配器(queue、priority_queue、stack),关联容器(pair工具类、map、multimap、set、multiset),其他容器(数组、string、流和bitset)。当需要选用时,我觉得主要从两个方面考虑,一个是这个容器提供了什么方法,如是如何存储一个数据,是如何找到一个存储的数据,而这些方式是不是你所需要的形式;再一个就是看查找一个存储的数据,删除一个数据用多长时间。当然如果对效率没有要求,那就看第一点了,只要这个容器提供的方法方便就可以选用它。那么我也从这两个角度总结容器的使用,简单归纳如下:
一、vector(向量):它类似一个数组,元素存储在一段连续的内存中,在<vector>头文件中定义为一个带有两个类型参数的类模板:一个是在向量中存储的元素的类型,另一个是分配器类型(此模板参数有默认值,一般可以不指定):
1。通常的用法就是:
double dTest = 2.3;
dVector.push_back(dTest);//还可以在放入其他数
double dRes = 0;
dRes = dVector[3];
此外,向量还提供at(),front()和back()等方法访问vector的元素;提供通常的6个重载比较操作符:==、!=、<、>、<=和>=;提供size和capacity方法得到其大小的信息;提供reserve预先分配空间,提供popback删除一个元素,提供clear清空向量。
2。向向量插入和从向量删除元素一般都需要线性时间,不过,有些操作实际上可以在vector最后位置上以摊分常量时间完成。随即访问单个元素的复杂性都为常量时间 。如果需要快速存取元素,但不打算经常增加或删除元素,就应当选用向量。
3。要注意的是[]不提供越界检查,使用方法at()提供越界检查;此外,vector类的复制构造函数和赋值操作符会对向量中所有元素完成深复制,所以为了提高效率,应当按引用或const引用向函数或方法传递vector。
4.向量很像数组,但之所以有这样的一个容器,可能在于它能动态增长,这是数组不能做到的,也是需用vector的一个重要理由。
5。有关以迭代器方式访问向量,在单独总结
- STL容器和迭代器用法归纳(1)
- STL容器和迭代器用法归纳(2)
- STL容器和迭代器用法归纳(3)
- 迭代器用法
- java迭代器用法
- 迭代器用法实例
- 迭代器用法实例
- HashMap的迭代器用法
- STL容器迭代删除元素
- 新学习到的Java Iterator(迭代器用法)
- STL容器实现方式归纳
- 指针为什么可以当迭代器用
- Java中的迭代器用用法
- STL模板和容器(1)
- STL容器迭代过程中删除元素技巧(转)
- 递归与基于STL容器的迭代
- STL容器迭代过程中删除元素技巧(转)
- STL容器迭代过程中删除元素技巧(转)
- 今天通过了70-536的考试:)祝贺!!!
- 一个读取EXCEL问题的解决
- 关于友情
- success
- 在Windows下访问Linux文件系统:Linux Reader
- STL容器和迭代器用法归纳(1)
- 智能找出内存泄漏 (转至inventworm)
- 剖析共享程序库
- C++ VC Base64编解码算法系列一(基本数据定义)
- 临时碎片
- 性格碎片
- 思想碎片
- C++ VC Base64编解码算法系列二(编码算法)
- JAVA学习笔记之二控件消息原理