STL读书笔记

STL中主要有6种组件

 

容器

类属算法

迭代器

函数对象

适配器

分配器

 

1.         容器

 

1.1          序列容器

 

       序列容器将一组具有相同类型(T)的对象以严格线性的形式组织在一起

l    vector<T>  提供对变长序列的随机访问,对序列末尾的插入和删除的操作时间是分摊常量的。

l    deque<T>  提供对变长序列的随机访问,对序列开头和末尾的插入和删除的操作时间均是分摊常量的。

l    list<T>   提供对变长序列的线性时间访问(O(N),其中N是序列的当前长度),但是对序列中任意位置的插入和删除操作均为常量时间的。

 

02-01.cpp

//string和数组使用STL类属算法reverse

 

#include <iostream>

#include <string>

#include <cassert>

#include <algorithm>

using namespace std;

 

int main(){

    cout << "using reverse algorithm with a string " << endl;

    string string1 = "mark twain";

    reverse(string1.begin(),string1.end());

    assert(string1 == "niawt kram");[g1] 

 

    cout <<string1<< "--- ok." << endl;

   

    cout << "using reverse algorithm with an array" << endl;

    char array1[] ="mark twain";

    int N1=strlen(array1) ;

    reverse(&array1[0],&array1[N1]);

    assert (string(array1) == "niawt kram");

    cout<<string(array1)<<"--- ok." << endl;

    system("pause");

    return 0;

   

}

 

向量vector提供了数组的所有特性,除此之外,向量还有许多其他有用的特性,而且是可扩展的

 

02-02.cpp

//对向量使用STL类属算法reverse

 

#include <iostream>

#include <vector>

#include <cassert>

#include <algorithm>

using namespace std;

 

template <typename container>

container make(const char s[]){

          return container(&s[0],&s[strlen(s)]);

         }

 

int main(){

    cout<< "using reverse algorithm with a vetor" << endl;

    vector<char> vector1 = make <vector<char> >("mark twain");

    reverse(vector1.begin(),vector1.end());

    assert(vector1 == make< vector<char> >("niawt kram"));

    cout << "--- ok." << endl;

    system("pause");

    return 0;

    }

 

 

1.2          有序关联容器

        

            有序关联容具有从基于键的集合中快速提取对象的能力。集合的大小可在运行时改变。

l    Set<Key>  支持唯一的键(每个键值只能有一个)并提供对键本身的快速检索

l    Multi<key> 支持可重复的键(同一键值可以有多个副本)并提供对键本身的快速检索

l    Map<Key>  支持惟一的(Key类型的)键并提供对另一个基于键的类型的T的快速检索

l    Multimap<Key,T>  支持可重复的(Key类型的)键并提供对另一个基于键的类型T的快速检索。

 

2.类属算法

 

STL中最简单的类属算法时findmerge

 

21 类属查找算法

Find

Where = find(first,last,value)

l    迭代器first表示算法对序列进行处理的起始位置

l    迭代器last表示算法对序列进行出来的终止位置

 

     表对应的迭代器不支持 *(where+1)中的+运算,但所有的STL迭代器都要求支持++

 

2.2 类属合并算法

 

Merge

 

Merge 算法的功能师将两个序列内元素合并道一个序列中

 

Merge(first1,last1,first2,last2,result)

 

l    First1last1表示一个输入序列的起始和终止,类型为T

l    First2last2表示一个输入序列的起始和终止,类型为T

l    按照类型T上的<的定义,两个输入序列均为升序

l    Result表示合并后存放元素的起始位置

 

 


 [g1]Assert

使用了cassert头文件中的assert宏来检查reverse函数的调用结果。这个宏以一个布尔表达式作为其唯一的参数,如果改表达式为真,则该宏什么也不作,如果该表达式为假,则打印一段信息并中止程序的运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值