包含头文件: #include<ext/rope> using namespace __gnu_cxx; 申请: rope text; 基本操作: test.push_back(x); //在末尾添加x test.insert(pos,x); //在pos插入x test.erase(pos,x); //从pos开始删除x个 test.copy(pos,len,x); //从pos开始到pos+len为止用x代替 test.replace(pos,x); //从pos开始换成x test.su…
STL的基本使用之关联容器:map和multiMap的基本使用 简介 map 和 multimap 内部也都是使用红黑树来实现,他们存储的是键值对,并且会自动将元素的key进行排序.两者不同在于map 不允许key重复,而multiSet 允许key重复 头文件 #include< map > 构造函数及析构函数 非变动性操作函数 运算符重载 下标运算符 查找操作函数 赋值操作 迭代器操作 插入删除操作 范例如下 #include <iostream> #include <m…
STL的基本使用之关联容器:set和multiSet的基本使用 简介 set 和 multiSet 内部都是使用红黑树来实现,会自动将元素进行排序.两者不同在于set 不允许重复,而multiSet 允许重复 头文件 #include < set > 构造函数及析构函数 非变动性操作函数 运算符重载 查找操作函数 赋值操作 迭代器操作 插入删除操作 范例如下 #include <iostream> #include <set> using namespace std;…
基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.         STL的从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接.几乎所有的代码都采 用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会.在C++标准中,STL被…
在学完了Allocator.Iterator和Traits编程之后,我们终于可以进入STL的容器内部一探究竟了.STL的容器分为序列式容器和关联式容器,何为序列式容器呢?就是容器内的元素是可序的,但未必有序.C++本身就提供了一种序列式容器array(即数组),而STL就提供了多种序列式容器,这些容器都是基于常见的数据建构开发出来的,例如vector.list.deque等等.接下来我们将会对STL里的所有序列式容器进行逐一的学习. 本节要学的容器就是我们日常开发中使用最多的vector,vec…
rope实现的接口可以参考这里. rope是可伸缩的string实现: 它们被设计为用于把string看作一个整体的高效操作 . 比如赋值.串联和子串的操作所花的时间差不多不依赖字符串的长度.与C的字符 串不同,rope是超长字符串的一个合理的表现,比如编辑缓冲区或邮件信息. 在后端,rope被实现为引用计数子串的树,而且每个子串都存储为字符数组.rope 接口的一个有趣方面是begin和end成员函数总是返回const_iterator.这是为了阻 止客户进行改变单个字符的操作.这样的操作是昂…
官方文档好像 GG 了. rope 不属于标准 STL,属于扩展 STL,来自 pb_ds 库 (Policy-Based Data Structures). 基本操作: #include <ext/rope> // 头文件 using namespace __gnu_cxx; // 注意名称空间 rope<int> rp; int main() { rp.push_back(x); // 在末尾插入 x rp.insert(pos, x); // 在 pos 处插入 x rp.e…
1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常相似,在许多操作的地方可以直接替换. deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). deque头部和尾部添加或移除元素都非常快速.但是在中部安插元素或移除元素比较费时. 2.deque对象的默认构造 deque采用模板类实现,deque对象的默认构…
1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添加或移除元素非常快速.但是在中部或头部插入元素或移除元素比较费时. 2.vector对象的默认构造 vector采用模板类实现,vector对象的默认构造形式 vector<T> vecT; vector<int> vecInt;          //一个存放int的vector容器…
目录 适配器 一丶适配器简介 二丶栈(stack)用法 1.栈的常用方法 适配器 一丶适配器简介 Stl中的适配器,有栈 (stack) 队列 queue 根priority_queue 适配器都是包装了 vector list deque等顺序容器. 也可以看做是由这些容器实现的一个新的容器. 适配器没有提供迭代器.也不能同事插入或者删除多个元素. 二丶栈(stack)用法 1.栈的常用方法 push(x) 将元素入栈 pop() 弹出栈顶元素.只是弹出.没有返回值 top() 获取栈顶元素(…
String Java.lang.String是Java的字符串类. Srting是一个不可变对象,所有对String修改的操作都需要构造新的String实例. String可以由char数组或字符串字面值来构造: char[] data = {'a', 'b', 'c'} String s = new String(data) String s = "Hello World"; String s = new String("Hello World"); 使用+运算…
String 前文已经说明了字符串的声明方式: var s = "Hello World"; var s: String = "Hello World"; 在 Scala 中,字符串的类型实际上是 Java String(java.lang.String),它本身没有 String 类.我们可以在Scala中使用Java String的所有方法. String对象是不可变对象, 更改String内容的操作实际上是创建了一个新的字符串. scala> var s…
[]运算符是Python中访问容器元素和切片的运算符 []有正向和反向两种下标,正向下标从0开始,向后递增: 反向下标以-1表示最后一个元素,-2表示倒数第二个字符,向前递减. []不仅可以访问单个元素还可以使用冒号表达式访问一段子序列(称为切片,slice). 切片有三种语法:seq[begin], seq[begin:end],seq[begin:end:step]. 注意冒号表达式中step写在最后而非中间,在begin为起始位置(0),end为结尾位置(-1)时可以省略:seq[:end…
今天使用advance遇到个问题,当advance移动步数超过容器大小时,表现的结果居然不一样. 再来看下stl源码 template<typename _BidirectionalIterator, typename _Distance> inline void __advance(_BidirectionalIterator& __i, _Distance __n, bidirectional_iterator_tag) { // concept requirements __gl…
STL 关联容器简单介绍 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素. 在 STL 中,有四种关联容器,各自是: map 键值对 key-value 存储,key 不可反复,即一个 key 仅仅能相应一个 value, 相应头文件<map> multimap 键值对 key-value 存储,key 能够反复,即一个 key 能够相应多个 value, 相应头文件<map> set 仅仅有 key, key 不可反复,相应头文件<set>…
大致介绍: rope这个东西,我刚刚知道这玩意,用的不是很多,做个简单的介绍. 官方说明:我是刘邦(我估计你是看不懂的). rope就是一个用可持久化平衡树实现的“重型”string(然而它也可以保存int或其他的类型),它不是标准STL里的东西,属于STL扩展. crope即rope<char>,就是一个“重型”string,且可以用cin/cout直接输入输出. 速度么,我并不知道,应该还可以,不过应该没有手写的快. 比赛的话,我不大清楚,据我所知Cena是不支持的.然而如果你会写可持久化…
准确来讲,heap并不属于STL容器,但它是其中一个容器priority queue必不可少的一部分.顾名思义,priority queue就是优先级队列,允许用户以任何次序将任何元素加入容器内,但取出时是从优先权最高的元素开始取.而优先权有两种,可以是容器内数值最低的,也可以是数值最高的.而priority queue是选择了数值高作为评判优先级的标准.对应实现方法就是binary max heap,其作为priority queue的底层机制. 所谓的binary heap(二叉堆),是一种…
Stack stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,元素的新增.删除.最顶端访问都在该出口进行,没有其他位置和方法可以存取stack的元素.换言之,stack不允许有遍历行为. 在学习了deque之后,我们知道了deque是一个双向开口的结构,deque的首尾端都能进行元素的插入和删除.我们既然拥有了这样的一个结构,那只要稍加调整就能符合stack的特征了,不必再另起炉灶.若以deque为底部机构并封闭其前端开口,保留尾端开口,便轻而易…
Deque是一种双向开口的连续线性空间.所谓的双向开口,就是能在头尾两端分别做元素的插入和删除,而且是在常数的时间内完成.虽然Vector也可以在首端进行元素的插入和删除(利用insert和erase),但效率奇差(涉及到整个数组的移动),无法被接受. 另外,Deque与Vector间最大的差别就是Deque没有类似于Vector中的容量的概念,因为Deque是以分段连续空间组合而成的,至于什么是分段连续空间,等会会详细讨论.所以Deque不会有像Vector那样“因旧空间不足而重新配置一块更大…
一.    引言 前面两节介绍的字符串格式化方法,都有其本身对应的缺陷,老猿不建议大家使用,之所以详细介绍主要是考虑历史代码的兼容性,方便大家理解前人留下的代码.老猿推荐大家新编码时使用format方法,因为该方法比前面2种方法更强大,也更容易理解.format方法是在Python2.6以后的版本才支持. format格式字符串中使用大括号将格式符(也称为"转换说明符"."替换字段")括起来,对应的真实值通过format方法传递进来.format格式字符串有多种使用…
Stack简介 stack是堆栈容器,是一种“先进后出”的容器. stack是简单地装饰deque容器而成为另外的一种容器. #include <stack> 1.stack对象的默认构造 stack采用模板类实现, stack对象的默认构造形式: stack <T> stkT; stack <int> stkInt;            //一个存放int的stack容器. stack <float> stkFloat;     //一个存放float的…
List简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.it++(ok), it+5(err) #include <list> 1.list对象的默认构造 list采用采用模板类实现,对象的默认构造形式:list<T> lstT;  如: list<int> lstInt;            //定义一个存放int的list容器. list<float> lstFloa…
Queue简介 queue是队列容器,是一种“先进先出”的容器. queue是简单地装饰deque容器而成为另外的一种容器. #include <queue> 1.queue对象的默认构造 queue采用模板类实现,queue对象的默认构造形式:queue<T> queT; 如: queue<int> queInt; //一个存放int的queue容器. queue<float> queFloat; //一个存放float的queue容器. ... //尖括…
deque与vector很相似,不仅能够在尾部插入和删除元素,还能够在头部插入和删除. 只是当考虑到容器元素的内存分配策略和操作性能时.deque相对vector较为有优势. 头文件 #include<deque> 创建deque对象 1)deque();//创建一个没有不论什么元素的deque对象. deque<int> d 2)deque(size_typen);//创建一个具有n个元素的deque对象.每一个元素採用它的类型下的默认值. deque<int> d(…
自python2.6开始,新增了一种格式化字符串的函数str.format(),它通过{}和:来代替% 位置方法格式化 >>>'{}-{}'.format('simon','ting') 'simon-ting' >>>'{1}.{2}'.format('www','baidu','com') 'baidu.com' >>> '{1}.{2} | {0}.{1}.{2}'.format('www','baidu','com') 'baidu.com |…
rope的部分简单操作 函数 功能 push_back(x) 在末尾添加x insert(pos,x) 在pos插入x erase(pos,x) 从pos开始删除x个 replace(pos,x) 从pos开始换成x substr(pos,x) 提取pos开始x个 at(x)/[x] 访问第x个元素 友情提示:cena不支持rope 传送门…
// 为包含指针的关联容器指定比较类型.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <set> #include <string> #include <iostream> using namespace std; struct StringPtrLess: public binary_function<const string*, const string*, bool> {…
Set和Multisets set和multiset会根据特定的排序准则,自动将元素排序.两者不同在于multisets允许元素重复而set不允许. 1.set和multiset的操作函数 生成.复制和销毁 set c //产生一个空的set/multiset,其中不含任何元素 set c(op) //以op为排序准则,产生一个空的set/mulitset set c1(c2) //产生某个set/multiset的副本,所有元素均被复制 set c(beg,end) //以区间[beg;end…
Vector Vector是一个动态数组. 1.Vector的操作函数 构造.拷贝和析构 vector<Elem> c //产生一个空vector ,其中没有任何元素 vector<Elem> c1(c2) //产生另一个同型vector的副本,(所有元素都被拷贝) vector<Elem> c(n) //利用元素的default构造函数生成一个大小为n的vector vector<Elem> c(n,elem) //产生一个大小为n的vector,每个元素…
list就是链表的实现,链表是什么,我就不再解释了.list的好处就是每次插入或删除一个元素,都是常数的时空复杂度.但遍历或访问就需要O(n)的时间. List本身其实不难理解,难点在于某些功能函数的实现上,例如我们会在最后讨论的迁移函数splice().反转函数reverse().排序函数sort()等等. list的结点 设计过链表的人都知道,链表本身和链表结点是不一样的结构,需要分开设计,这里的list也不例外,以下是STL list的结点结构: template <class T> s…