STL学习(一)

原创 2012年03月30日 18:42:38

STL概述

    STL的一个重要的特点:数据结构和算法的分离。

    为了避免和其他头文件冲突,STL的头文件中不再使用常规的.h扩展,例如包含string类、迭代器和算法:

    #include <string>

    表 1. STL头文件和容器类

#include

Container Class

 

<deque>

deque

 

<list>

list

 

<map>

map, multimap

 

<queue>

queue, priority_queue

 

<set>

set, multiset

 

<stack>

stack

 

<vector>

vector, vector<bool>

 


 命名空间

    using namespace std;

迭代器

        迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,c++的指针也是一种迭代器。但是迭代器不仅仅是指针,因此它们不一定具有地址。


迭代器的类型

       对于STL数据结构和算法,可以使用五种迭代器:

  •  Input iterators 提供对数据的只读访问。
  •  Output iterators 提http://write.blog.csdn.net/postedit/7411459供对数据的只写访问。
  •  Forward iterators 提供读写操作,并能向前推进迭代器。
  •  Bidireactional iterators 提供读写操作,并能向前和向后操作。
  •  Random access iterators 提供读写操作,并能在数据中随机移动。

        尽管各种不同的STL实现细节方面有所不同,可以把上边的迭代器想象为一种继承关系,下面的迭代器继承自上面的迭代器。

 指针迭代器

            下面的程序显示了,一个指针也是一个迭代器,同时也显示了STL一个主要特征:STL不只能够用于自己的类类型,而且可以用于任何的c或者c++类型(这句什么意思?)

#include <iostream.h>
#include <algorithm>

using namespace std;

#define SIZE 100
int iArray[SIZE];

int main(int argc,char *argv[])
{
    iArray[20] = 50;
    
    int *ip = find(iArray,iArray+50,50);

    if (ip == iArray+SIZE)
    {
        cout<<"没有找到搜索的元素"<<endl;
    }
    else
    {
        cout<<*ip<<" 在数组中找到"<<endl;
    }
    return 0;
}

容器迭代器

       容器迭代器和c++的指针虽然都是迭代器,但是和指针变量不同的是,可以使用容器类的方法获得迭代器的对象,例如begin()和end(),rbegin()和rend()等。

 #include <iostream.h>
#include <algorithm>
#include <vector>

using namespace std;

vector<int>  intVector(100);
int main(int argc,char *argv[])
{
    //iArray[20] = 50;

    intVector[20] = 50;
    vector<int>::iterator ivalue = find(intVector.begin(),intVector.end(),50);
    
    if (ivalue != intVector.end())
    {
        cout<<"向量中包括值"<<*ivalue<<endl;
    }
    else
    {
        cout<<"向量中不包括指定的值"<<endl;
    }
    return 0;
}

    (待续。。。。。。)

学习STL map, STL set之数据结构基础

STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构。 C++ STL 之所以得到广泛的赞誉,也被很多人使用...
  • acpchenpeng
  • acpchenpeng
  • 2016年01月25日 10:48
  • 260

STL基础篇(适合初学者快速入门)

1.       STL 是什么 作为一个C++ 程序设计者,STL 是一种不可忽视的技术。 Standard Template Library (STL) :标准模板库, 更准确的说是 C++ 程...
  • a20102110080212
  • a20102110080212
  • 2013年09月14日 11:52
  • 2313

STL源码学习总结及项目下载地址

从开始看STL源码到今天差不多有一个月的时间了,在这研读STL源码过程中确实学习到了很多,深深被大师们的设计思想所打动。其中使用迭代器的思想是其STL的最大的亮点,通过泛型编程,是得所有的容器对外都提...
  • a_1_2_ab
  • a_1_2_ab
  • 2014年04月29日 09:45
  • 1112

最全ACM常用STL

STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题) 头文件:#include using namespace std; 调用: next_permutation(start, e...
  • dreamzuora
  • dreamzuora
  • 2016年12月07日 20:38
  • 681

《STL源码剖析》学习笔记

第二章:空间配置器(allocator) 考虑到小型区块可能造成的内存破碎问题,SGI设计了双层级配置器。 当配置区块超过128bytes时,便调用第一级配置器,即直接使用malloc() free(...
  • qiaominghe
  • qiaominghe
  • 2016年05月27日 09:05
  • 1537

C++ STL学习经典

C++语言学习之STL 的组成 STL有三大核心部分:容器(Container)、算法(Algorithms)、迭代器(Iterator),容器适配器(container adaptor),函数对象...
  • winder9898
  • winder9898
  • 2016年04月14日 21:53
  • 111

C++ STL源码学习(之hash_table篇)

这是SGI STL哈希表的实现,由于平时见到较少,因此在源代码中注释做的较为详细...
  • u011907342
  • u011907342
  • 2014年10月11日 22:39
  • 1074

C++ STL源码学习(list篇)

C++ list源代码学习整理。
  • u011907342
  • u011907342
  • 2014年09月28日 18:25
  • 1055

《STL源码剖析》学习之迭代器

在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通...
  • shudou
  • shudou
  • 2013年09月08日 22:54
  • 5839

C++ 学习笔记:STL 容器一些底层机制

vector 容器 list 容器 deque 容器 stack queue heap priority_queue set 和 multiset 容器 map 和 multimap 容器 hash_...
  • TQH_Candy
  • TQH_Candy
  • 2016年08月31日 18:36
  • 1288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL学习(一)
举报原因:
原因补充:

(最多只允许输入30个字)