美文网首页
容器与算法

容器与算法

作者: eesly_yuan | 来源:发表于2014-09-15 14:15 被阅读52次
顺序容器
  • vector、list、deque

  • 容器内元素类型的约束:必须支持赋值和复制操作,故引用类型和IO对象无法放入容器内

  • 迭代器,提供的常用操作,*,->,++,--,==,!=

  • vector和deque的迭代器提供的额外的操作,+n,-n,+=,-=,>,>=,<,<=

  • 顺序容器提供的赋值操作

c1 = c2
c1.swap(c2)
c.assign(b,e)------assign首先会删除容器内所有的元素
c.assign(n,t)
  • vector的capacity和reserve成员
    capacity获取vector能够存储的元素总数
    reserve设置vector应该事先预留多少的元素存储空间

  • 指适用string的操作

s.substr(pos,n)
s.substr(pos)
s.substr()-----返回是副本
  • string.find_first_of(args)在s中查找args的任意字符的第一次出现

  • 容器适配器
    queue、priority_queue、stack
    stack和queue都是默认基于deque实现
    priority_queue是默认基于vector实现

  • stack支持的操作empty\size\pop\top\push

  • queue和priority_queue
    queue:empty\size\pop\front\back\push
    priority_queue:empty\size\pop\top\push
    其中pop都是删除首元素,但不返回值


关联容器
  • 关联容器通过键来存储和读取元素、顺序容器则是通过容器中的位置顺序存储和访问元素,同时关联容器的元素按键值排序

  • pair<string,string> p包含的操作,make_pair,<,==,.first(这是一个const的量),.second

  • 关联容器不能通过容器大小来定义

  • list:插入删除、vector:随机访问、deque:首尾插入删除、map:key-value对集合情况、set:键集合

  • map键类型约束:其类型必须存在一个比较函数,更进一步说支持<运算

  • map相关类型

1、map::key_type
2、map::mapped_type
3、map::value_type 这个是一个pair类型具体而言是
pair<map::key_type,map::mapped_type>
  • multimap和multiset,允许多个元素拥有相同的键,即multimap一个键可以对应多个值,multiset可以有多个相同的剑指
//输出同一个键值的多个实例
multimap<string,string>::iterator beg = test.lower_bound("test");
multimap<string,string>::iterator end = test.upper_bound("test");
while(beg!=end){ cout<<beg->second<<endl;beg++;}

泛型算法
  • 标准容器自定义了很少的操作,标准库并未为每种容器定义其他的可操作的成员函数,而是定义了一组泛型算法,可以操作多种容器。

  • 算法不使用容器的操作,其实现与容器类型无关,元素的访问和遍历通过迭代器实现。

  • 一个有意思的算法
    string line = accumulate(wordvec.begin(),wordvec.end(),string(" "));

  • 额外三种迭代器
    1、插入迭代器,实现在容器中插入元素的功能
    2、iosream迭代器,与IO流绑定,迭代遍历绑定的IO流
    3、反向迭代器reverse_iterator

  • 五种迭代器

输入迭代器++
输出迭代器++
前向迭代器++
双向迭代器++,--
随机访问迭代器++,--,+=,-=,比较

map,set,list提供双向访问迭代器
vector,string,deque提供随机访问迭代器

  • sort(beg,end);
    sort(beg,end,comp);
    find(beg,end,val);
    find_if(beg,end,pred);
    reverse(beg,end)
    reverse(beg,end,dest);

  • list使用双向链表实现,故其操作如果使用标准算法,性能大大下降,故在标准库专门为list实现特有的操作,如list.merge、list.romove、list.reverse、list.sort、list.unique等

相关文章

  • 容器与算法

    顺序容器 vector、list、deque 容器内元素类型的约束:必须支持赋值和复制操作,故引用类型和IO对象无...

  • 数据结构--容器汇总(java & Android)

    数据结构与算法容器概览(java)容器类框架分析(1)(java)ArrayList源码分析容器类框架分析(2)(...

  • GeekBand STL与泛型编程 Third Week

    GeekBand STL与泛型编程 Third Week 变易算法 变易算法是指那些改变容器中对象的操作。具体包括...

  • STL漫谈

    TraitsIterator是STL的核心思想。Iterator是把针对容器的算法与容器的具体实现分离、解耦的设计...

  • 第10章:泛型算法

    #1.概述 #2.初始泛型算法只读算法写容器元素的算法重排容器元素的算法 #3.定制操作向算法传递函数lambda...

  • [算法] STL

    标准模板库STL的核心设计思想是将容器(类模板)与算法(函数模板)分开,使用迭代器封装访问容器元素的方法,容器所支...

  • Java并发编程之并发容器 CopyOnWrite,Concur

    前言 JUC 高并发容器是基于非阻塞算法(或者无锁编程算法)实现的容器类,无锁编程(Lock Free)算法主要通...

  • C++ algorithm

    非修正序列算法 非修正算法不修改容器的数值,一般进行搜索和取值操作 修正序列算法 修正算法会修改容器的内容,进行增...

  • 常用算数生成算法

    /* accumulate算法 计算容器元素累计总和 @param beg容器开始迭代器 @param end容器...

  • C++——STL(Standard Template Libra

    容器(Containers)list、deque、vector、map、set等 算法(Algorithms)算法...

网友评论

      本文标题:容器与算法

      本文链接:https://www.haomeiwen.com/subject/xtfutttx.html