官方文档好像 GG 了。
rope 不属于标准 STL,属于扩展 STL,来自 pb_ds 库 (Policy-Based Data Structures)。
基本操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <ext/rope> // 头文件 using namespace __gnu_cxx;
rope<int> rp;
int main() { rp.push_back(x); rp.insert(pos, x); rp.erase(pos, x); rp.length(); rp.size(); rp.replace(pos, x); rp.substr(pos, x); rp.copy(pos, x, s); rp[x]; rp.at(x); return 0; }
|
rope 内部是块状链表实现的,黑科技是支持 $O(1)$ 复制,而且不会空间爆炸 (rope 是平衡树,拷贝时只拷贝根节点就行)。因此可以用来做可持久化数组。
拷贝历史版本的方式:
1 2
| rope<int> *his[100000]; his[i] = new rope<int> (*his[i - 1]);
|
缺点是常数大 (C++ STL 的通病)。
还有一个叫 crope 的东西,crope 即 rope,可以用 cin/cout 直接输入输出,常用于字符串操作。