stl rope

rope准确的中文翻译是可持久化平衡树,具牛逼

其貌似不是标准的stl容器,在名称空间__gnu_cxx中

其用起来和string差不多

s.insert(a,b) 在s的第a位插入b(b可为字符串)

s.erase(a,b)在s的第a位删除b

输出时直接将s[c]表示s的第c位数

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
using namespace __gnu_cxx;
#include<ext/rope>
crope s;
int main()
{
    int n;
    scanf("%d",&n);

    for(int i=1;i<=n;i++)
    {
        char ss=getchar();
        s.insert(0,ss);
    }
    for(int i=0;i<=n-1;i++)
    putchar(s[i]);
}

先脑补一下,并且这个东西使用平衡树实现的,很快!

时间: 2024-11-08 16:19:59

stl rope的相关文章

C++ STL rope 可持久化平衡树 (可持久化数组)

官方文档好像 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

SGI STL rope

rope实现的接口可以参考这里. rope是可伸缩的string实现: 它们被设计为用于把string看作一个整体的高效操作 . 比如赋值.串联和子串的操作所花的时间差不多不依赖字符串的长度.与C的字符 串不同,rope是超长字符串的一个合理的表现,比如编辑缓冲区或邮件信息. 在后端,rope被实现为引用计数子串的树,而且每个子串都存储为字符数组.rope 接口的一个有趣方面是begin和end成员函数总是返回const_iterator.这是为了阻 止客户进行改变单个字符的操作.这样的操作是昂

UVALive 6145 Version Controlled IDE(可持久化treap、rope)

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4156 题目拷贝难度大我就不复制了. 题目大意:维护一个字符串,要求支持插入.删除操作,还有输出第 i 次操作后的某个子串.强制在线. 思路1:使用可持久化treap可破,详细可见CLJ的<可持久化数据结构的研究>. 思路2:rope大法好,详见:http

算法及定理证明

RSA算法原理 黑客教程网址大全 扩展欧几里德算法 卡特兰数 莫比乌斯反演 反素数深度分析 可持久化线段树 STL Rope 位运算及位优化 最近公共祖先 LCA转RMQ 十个利用矩阵乘法解决的经典题目 多重背包 单调队列优化 线段树求矩形面积并 SPFA算法 c++ string用法 DAG图的最小路径覆盖 扩展KMP 二分图最大匹配的K?nig定理及其证明

[rope大法好] STL里面的可持久化平衡树--rope

简单用法: #include <ext/rope> using namespace __gnu_cxx; int a[1000]; rope<int> x; rope<int> x(a,a + n); rope<int> a(x); x->at(10); x[10]; x->push_back(x) // 在末尾添加x x->insert(pos,x) // 在pos插入x x->erase(pos,x) // 从pos开始删除x个

Effective STL 条款1:仔细选择你的容器

条款1:仔细选择你的容器 了解各种容器的实现方法,知道各种容器的内存管理方式.各种操作所对应的底层操作,然后根据需要选择恰当的容器. 对于容器的分类: 标准STL序列容器:vector,string,deque和list 标准STL关联容器:set,multiset,map和multimap 非标准序列容器:slist(单向链表)和rope(重型字符串--不懂) 非标准关联容器:hash_set,hash_multiset,hush_map和hash_multimap vector == str

STL::list

标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.slist是一个单向链表,rope本质上是一个重型字符串. 非标准关联容器hash_set.hash_multiset.hash_map和hash_multimap. STL中的list就是一双向链表,可高效地进行插入删除元素. list不支持随机访问.所以没有 at(pos)和operator[]. list对象l

STL中的容器

STL中的容器 一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.slist是一个单向链表,rope本质上是一个重型字符串 非标准关联容器hash_set.hash_multiset.hash_map和hash_multimap. 几种标准非STL容器,包括数组.bitset.valarray.stack.queue和priority_queue 值得

c++ STL总结一:vertor和list

STL提供六大组件,彼此可以组合套用 1.容器(containers):各种数据结构,如vertor,list,deque,set,map.从实现的角度来看,STL容器是一种class template 2.算法(algorithms):各种算法如sort,search,copy,earse.STL算法是一种 function template. 3.迭代器(iterators):扮演容器与算法之间的胶合剂,是所谓的“泛型指针”.所有STL容器都有自己的专属的迭代器. 4.仿函数(functor