码迷,mamicode.com
首页 > 编程语言 > 详细

C++学习笔记43:STL

时间:2017-03-11 18:49:22      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:++   tran   双端队列   结构体   blog   调用   文件   container   multiple   

STL简介(standard Template Library)
STL的基本组件:容器(container),迭代器(iterator),函数对象(function object)
算法(algorithms)
 
Iterators是算法和容器的桥梁
将迭代器作为算法的参数,通过迭代器来访问容器而不是把容器直接作为算法的参数;
 
将函数对象作为算法的参数而不是将函数所执行的运算作为算法的一部分;
使用STL中提供的或者自定义的迭代器和函数对象,配合STL算法,可以组合出各种各样的功能;
 
容器
  概念:容纳、包含一组元素的对象
  基本容器类模板:
    顺序容器:array(数组),vector(向量),deque(双端队列),forward_list(单链表),list(列表)
    (有序)关联容器:set(集合),multiset(多重集合),map(映射),multiple(多重映射)
  无序关联容器:
    unordered_set, unordered_multiset,unodered_map,unordered_multimap
 
容器适配器
  stack(栈)
  queue(队列)
  priority_queue(优先队列)
注意:添加相应的头文件
 
STL的基本组件---迭代器(iterator)
  1. 提供了一种顺序访问容器中每个元素的方法
  2. 可以使用++运算符来获得指向下一个元素的迭代器
  3. 可以使用*运算符访问迭代器所指向的元素,如果元素类型是类或者结构体,可以使用->运算符直接访问该元素的一个成员;
  4. 有些迭代器还支持--运算符获得指向上一个元素的迭代器
  5. 迭代器是泛化的指针,指针也具有同样的特性,因此指针本身就是一种迭代器
  6. 使用独立于STL的迭代器,需要包含头文件<iterator>

 

STL的基本组件---函数对象(function object)

  1. 一个行为类似函数的对象,对它可像调用函数一样调用
  2. 函数对象是泛化的函数:任何普通的函数和任何重载了“()”运算符的类的对象都可以作为函数对象使用
  3. 使用STL的函数对象,需要包含头文件<functional>

STL的基本组件---算法(algorithm)

  1. 可以广泛用于不同对象和内置的数据类型
  2. STL包括70多个算法(排序,消除算法,计数算法,比较算法,变换算法,置换算法,容器管理等)
  3. 使用STL的算法,需要包含头文件<algorithm>
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
    const int N = 5;
    vector<int> s(N);//容器
    for (int i = 0; i < N; i++)
    {
        cin >> s[i];
    }
    
    /*
    算法:取相反数后输出;ostream_iterator<int>(cout, " "):输出流迭代器
    negate<int>() 取相反数的函数;
    transform算法的一种实现:
    transform算法顺序遍历first和last两个迭代器所指向的元素;
    将每个元素的值作为函数对象op的参数;
    将op的返回值通过迭代器result顺序输出;
    遍历完成后result迭代器指向的是输出的最后一个元素的下一个位置,transform会将该迭代器返回;
    template <class InputIterator, class OutputIterator, class UnaryFunction>
    OutputIterator transform(InputIterator first, InputIterator last, OutputItertor result,UnaryFunction op)
    {
    for(;first!=last;++first,++result)
    *result = op(*first);
    return result;
    }
    */
    transform(s.begin(), s.end(), ostream_iterator<int>(cout, " "), negate<int>());
    cout << endl;
    return 0;
}

C++学习笔记43:STL

标签:++   tran   双端队列   结构体   blog   调用   文件   container   multiple   

原文地址:http://www.cnblogs.com/hujianglang/p/6535744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!