类别:容器 | 组件类型:类型 |
尽管rope可以将 rope 视为字符的 容器,并且几乎是 序列,但这很少是完成任务的最有效方法。替换一个rope中的单个字符是很慢的:每次字符替换基本上都由两个子字符串操作和两个连接操作组成。Roperope
主要针对更函数式的编程风格。vector<char>或引用计数的字符串实现在以下方面有所不同。
优点
可以通过rope几乎但不完全是 序列。它支持随机访问 const_iterators。向前或向后遍历每次操作花费常数时间。还提供了非常量迭代器。但是,通过非常量迭代器进行赋值是一项开销很大的操作(基本上是对数时间,但具有很大的常数)。应在频繁执行的代码中避免这种情况。
为了阻止意外使用开销很大的操作,begin和endrope 上的成员函数返回const_iterator。如果需要非常量迭代器,则应使用成员函数mutable_begin和mutable_end。
对rope的任何修改都会使引用该 rope 的常量迭代器失效。在更新后,可变迭代器引用同一rope中的相同位置。(如果迭代器引用插入点之后的位置,这可能会令人惊讶。)它们保持有效,除非迭代器引用的位置超过结果rope.
crope r(1000000, 'x'); // crope is rope<char>. wrope is rope<wchar_t> // Builds a rope containing a million 'x's. // Takes much less than a MB, since the // different pieces are shared. crope r2 = r + "abc" + r; // concatenation; takes on the order of 100s // of machine instructions; fast crope r3 = r2.substr(1000000, 3); // yields "abc"; fast. crope r4 = r2.substr(1000000, 1000000); // also fast. reverse(r2.mutable_begin(), r2.mutable_end()); // correct, but slow; may take a // minute or more.
参数 | 描述 | 默认 |
---|---|---|
T | 的rope值类型:通常为char或wchar_t. [2] | |
Alloc | 的rope的分配器,用于所有内部内存管理。 | alloc |
成员 | 定义位置 | 描述 |
---|---|---|
value_type | 容器 | 的rope的值类型,通常T为char或wchar_t. |
difference_type | 容器 | 带符号的整数类型。 |
size_type | 容器 | 无符号整数类型。 |
reference | 容器 | 对rope元素的引用。[3] |
const_reference | 容器 | 对T. [3] |
的常量引用 | 容器 | pointerT. [3] |
指向 | 容器 | const_pointerT. [3] |
指向 | 的常量指针 | const_reverse_iteratorrope. |
可逆容器 | 的常量指针 | 的常量迭代器rope. |
reverse_iterator | 容器 | 的可变迭代器rope. |
const_iterator | 容器 | iteratorrope. |
用于遍历 | rope. | 的可变 随机访问迭代器rope用于遍历 |
的常量 随机访问迭代器 | rope. | 的可变 随机访问迭代器roperope(const charT* s)从 C 字符串构造. |
。 | rope(const charT* s, size_t n) | 从rope(不一定是空终止的) |
的数组构造 | rope(const charT* s, size_t n) | 从rope(不一定是空终止的) |
charT | rope(const charT* s, size_t n) | 从rope(不一定是空终止的) |
rope(const const_iterator& f, const const_iterator& l) | rope. | 序列 |
使用范围的副本创建 | 容器 | 。 |
rope(const iterator& f, const iterator& l) | rope | rope(const charT* f, const charT* l) |
rope(charT c) | 容器 | 单字符构造函数。 |
rope() | 容器 | 默认构造函数。 |
rope(char_producer<charT>*, size_t, bool) | 容器 | 见下文。 |
rope(const rope& x) | 容器 | 复制构造函数。rope~rope() |
析构函数。 | 容器 | rope& operator=(const rope&x)rope. |
赋值运算符。 | rope | void swap(rope& x)交换两个 |
的内容。 | 容器 | size_type size() constrope返回 |
的大小 | 容器 | size_type length() const与. |
相同 | 容器 | sizeconst_iteratorsize_type max_size() constrope. |
保证可表示的最长 | 容器 | sizeconst_iterator的大小。rope. |
bool empty() const | rope | sizereverse_iteratorsize_type max_size() constrope. |
等效于 | rope | sizereverse_iterator的大小。rope. |
size() == 0 | 的常量指针 | const_iterator begin() const指向返回一个指向rope |
开头的 | 的常量指针 | const_iterator begin() const指向const_iterator end() constrope |
指向 | rope | const_iterator begin() const可逆容器返回一个指向rope. |
末尾的 | rope | const_iterator begin() const可逆容器const_iterator end() constrope. |
iterator mutable_begin() | iterator mutable_end() | const_reverse_iterator rbegin() const返回一个指向反转开头的 |
const_reverse_iterator rend() const | iterator mutable_end() | const_reverse_iterator rbegin() const返回一个指向反转开头的 |
指向反转 | rope | const_iterator begin() constreference末尾的返回一个指向反转iterator mutable_rbegin() |
iterator mutable_rend() | rope. | charT operator[](size_type n) const |
随机访问容器 | rope(const charT* s, size_t n) | 返回第 |
n | 个元素。 | charT at(size_type pos) const |
reference mutable_reference_at(size_type n) | 指向第 | n |
个元素的 | 个元素。 | int compare(const rope&) const |
三向比较。见下文。 | 指向第 | charT front() const |
返回第一个元素。 | 个元素。 | charT back() const |
后插入序列 | rope | 返回最后一个元素。void push_front()前插入序列在前面插入一个新元素。. |
void push_back(charT) | rope(const charT* s, size_t n) | 在末尾插入一个新元素。void pop_front()前插入序列在前面插入一个新元素。. |
删除第一个元素。 | rope(const charT* s, size_t n) | 在末尾插入一个新元素。void pop_back()前插入序列在前面插入一个新元素。. |
删除最后一个元素。 | rope(const charT* s, size_t n) | 在末尾插入一个新元素。返回一个指向反转iterator insert(const iterator& p, const rope& x)void pop_front()前插入序列在前面插入一个新元素。. |
在 | rope | p在前面插入一个新元素。. |
之前插入 | rope | 的内容从 C 字符串构造前插入序列在前面插入一个新元素。. |
x | rope(const charT* s, size_t n) | iterator insert(const iterator& p, charT c)插入前插入序列在前面插入一个新元素。. |
iterator insert(const iterator& p, const const_iterator& f, const const_iterator& l) |
rope(const charT* s, size_t n) | iterator insert(const iterator& p, charT c)插入前插入序列在前面插入一个新元素。. |
iterator insert(const iterator& p, const iterator& f, const iterator& l) |
rope(const charT* s, size_t n) | iterator insert(const iterator& p, charT c)插入前插入序列在前面插入一个新元素。. |
c | rope | 返回最后一个元素。void push_front()iterator insert(const iterator& p)插入iterator mutable_rbegin() |
charT() | rope | iterator insert(const iterator& p, size_t n, charT c)void pop_front()iterator insert(const iterator& p)插入iterator mutable_rbegin() |
的 | rope | iterator insert(const iterator& p, size_t n, charT c)void pop_back()iterator insert(const iterator& p)插入iterator mutable_rbegin() |
个副本 | rope | 在末尾插入一个新元素。返回一个指向反转iterator insert(const iterator& p, const rope& x)void pop_front()iterator insert(const iterator& p)插入iterator mutable_rbegin() |
iterator insert(const iterator& p, const charT* s) | rope | 在插入iterator mutable_rbegin() |
之前插入 C 字符串 | rope | 的内容从 C 字符串构造iterator insert(const iterator& p)插入iterator mutable_rbegin() |
iterator insert(const iterator& p, const charT* s, size_t n) | rope | iterator insert(const iterator& p, charT c)插入iterator insert(const iterator& p)插入iterator mutable_rbegin() |
void insert(size_t i, const const_iterator& f, const const_iterator& l) |
rope | iterator insert(const iterator& p, charT c)插入iterator insert(const iterator& p)插入iterator mutable_rbegin() |
void insert(size_t i, const iterator& f, const iterator& l) |
rope | iterator insert(const iterator& p, charT c)插入iterator insert(const iterator& p)插入iterator mutable_rbegin() |
插入(不一定是空终止的) | rope(const charT* s, size_t n) | 的数组在前面插入一个新元素。. |
iterator insert(const iterator& p, const charT* f, const char* l) | rope(const charT* s, size_t n) | 插入范围插入. |
[f, l) | rope | void insert(size_t i, const rope& x)返回一个指向反转在插入iterator mutable_rbegin() |
之前 | rope | i |
插入 | rope | void insert(size_t i, charT c)从 C 字符串构造. |
插入字符 | rope | void insert(size_t i) |
插入 | rope | charT()void pop_front(). |
void insert(size_t i, size_t n, charT c) | rope | charT()void pop_back(). |
void insert(size_t i, const charT* s) | rope | 在返回一个指向反转iterator insert(const iterator& p, const rope& x)void pop_front(). |
之前插入 C 字符串 | rope | void insert(size_t i, const charT* s, size_t n)void push_front(). |
void insert(size_t i, const charT* f, const charT* l) | rope | rope(const charT* f, const charT* l) |
void erase(const iterator& p) | rope | rope(const charT* f, const charT* l) |
擦除 | rope | rope(const charT* f, const charT* l) |
void replace(const iterator& f, const iterator& l, const charT* s, size_t n) |
rope | rope(const charT* f, const charT* l) |
void replace(const iterator& f1, const iterator& l1, const charT* f2, const charT* l2) |
rope | rope(const charT* f, const charT* l) |
void replace(const iterator& f1, const iterator& l1, const const_iterator& f2, const const_iterator& l2) |
rope | rope(const charT* f, const charT* l) |
void replace(const iterator& f1, const iterator& l1, const iterator& f2, const iterator& l2) |
rope | rope(const charT* f, const charT* l) |
指向的元素 | rope | rope(const charT* f, const charT* l) |
p | rope | rope(const charT* f, const charT* l) |
void erase(const iterator& f, const iterator& l) | rope | rope(const charT* f, const charT* l) |
擦除范围 | rope | rope(const charT* f, const charT* l) |
void replace(const iterator& p, const charT* f, const charT* l) |
rope | rope(const charT* f, const charT* l) |
void replace(const iterator& p, const_iterator f, const_iterator l) |
rope | rope(const charT* f, const charT* l) |
void replace(const iterator& p, iterator f, iterator l) |
rope | rope(const charT* f, const charT* l) |
void erase(size_t i, size_t n) | rope | rope(const charT* f, const charT* l) |
擦除从第 | rope | rope(const charT* f, const charT* l) |
个元素开始的 | rope | rope(const charT* f, const charT* l) |
个元素 | rope | rope(const charT* f, const charT* l) |
void replace(size_t i, size_t n, const charT* f, const charT* l) |
rope | rope(const charT* f, const charT* l) |
void replace(size_t i, size_t n, const const_iterator& f, const const_iterator& l) |
rope | rope(const charT* f, const charT* l) |
void replace(size_t i, size_t n, const iterator& f, const iterator& l) |
rope | rope(const charT* f, const charT* l) |
append(const charT* s) | rope | rope(const charT* f, const charT* l) |
追加 C 字符串。 | rope | rope(const charT* f, const charT* l) |
append(const charT* s, size_t) | rope | rope(const charT* f, const charT* l) |
追加(不一定是空终止的) | rope | rope(const charT* f, const charT* l) |
的数组 | rope | rope(const charT* f, const charT* l) |
void replace(size_t i, const const_iterator& f, const const_iterator& l) |
rope | rope(const charT* f, const charT* l) |
void replace(size_t i, const iterator& f, const iterator& l) |
rope | rope(const charT* f, const charT* l) |
append(const charT* f, const charT* l) | rope | rope(const charT* f, const charT* l) |
追加一个范围。 | rope | rope(const charT* f, const charT* l) |
rope substr(迭代器 f, 迭代器 l) const | rope | rope(const charT* f, const charT* l) |
rope substr(常量迭代器 f, 常量迭代器 l) const | rope | rope(const charT* f, const charT* l) |
rope substr(size_t i, size_t n = 1) const | rope | rope(const charT* f, const charT* l) |
void copy(charT* buf) const | rope | 将绳 (rope) 复制到字符数组中从 C 字符串构造. |
size_type copy(size_type pos, size_type n, charT* buf) |
rope | 将绳 (rope) 复制到字符数组中从 C 字符串构造. |
const charT* c_str() const | rope | rope(const charT* f, const charT* l) |
void delete_c_str() | rope | rope(const charT* f, const charT* l) |
rope operator+(const rope& L, const rope&R) | rope | 连接L和R。这是一个全局函数,不是成员函数。 |
rope& operator+=(rope& L, const rope& R) | rope | 在R将 R 连接到 LL。这是一个全局函数,不是成员函数。 |
rope operator+(const rope& L, const charT* s) | rope | 连接L和s。这是一个全局函数,不是成员函数。 |
rope& operator+=(rope& L, const charT* s) | rope | 在s将 R 连接到 LL。这是一个全局函数,不是成员函数。 |
rope operator+(const rope& L, charT c) | rope | 连接L和void pop_front()。这是一个全局函数,不是成员函数。 |
rope& operator+=(rope& L, charT c) | rope | 在void pop_front()将 R 连接到 LL。这是一个全局函数,不是成员函数。 |
bool operator<(const rope&, const rope&) | 前向容器 | 字典序比较。这是一个全局函数,不是成员函数。 |
bool operator==(const rope&, const rope*) | 前向容器 | 测试两个绳 (rope)rope是否相等。这是一个全局函数,不是成员函数。 |
ostream& operator<<(ostream& os, rope x) | rope | 将 x 输出void push_front()到流os。这是一个全局函数,不是成员函数。 |
函数 | 描述 |
---|---|
用于遍历 | 的可变 随机访问迭代器rope从 C 字符串构造。绳 (rope) 由以*s开始,直到但不包括第一个空字符的字符序列组成。 |
的常量 随机访问迭代器 | 的可变 随机访问迭代器rope从字符数组从 C 字符串构造构造。绳 (rope) 由范围[s, s + n)中的字符组成。请注意,此范围允许包含嵌入的空字符。 |
rope(const const_iterator& f, const const_iterator& l) | 构造一个由单个字符组成的绳 (rope)void pop_front(). |
rope(char_producer<charT>* cp, size_t n, bool destroy) | 构造一个大小为 n 的绳 (rope)返回一个指向反转,其字符由cp按需计算。对象*cp必须在对结果rope绳 (rope)的任何引用,或rope从它派生的对象有效时保持有效。如果destroy是true,那么delete cp一旦cp不再需要,将自动执行。通常destroy将是 truetrue,除非cp是指向静态分配存储的指针。在栈上分配*cp是很少安全的。 |
赋值运算符。 | 等效于交换两个 |
bool empty() const | sizereverse_iteratorsize_type max_size() constrope。之所以存在此成员函数,是因为可变rope迭代器比常量rope迭代器开销更大。 |
等效于 | sizereverse_iterator的大小。rope。之所以存在此成员函数,是因为可变rope迭代器比常量rope迭代器开销更大。 |
指向 | const_iterator begin() const可逆容器返回一个指向rope。之所以存在此成员函数,是因为可变rope迭代器比常量rope迭代器开销更大。 |
末尾的 | const_iterator begin() const可逆容器const_iterator end() constrope。之所以存在此成员函数,是因为可变rope迭代器比常量rope迭代器开销更大。 |
指向反转 | const_iterator begin() constreference末尾的返回一个指向反转第 i 个元素。之所以存在此成员函数,是因为对rope元素的非常量引用开销相当高。 |
int compare(const rope& x) | 三向比较,很像标准 C 库中的函数strcmp。如果*this按字典顺序小于void push_front(),则返回一个负数;如果*this按字典顺序大于void push_front(),则返回一个正数;如果两者rope都不是按字典顺序小于另一个,则返回零。 |
后插入序列 | 在位置rope void push_front()之前立即插入在前面插入一个新元素。. |
在 | 的内容。在位置在前面插入一个新元素。之前立即插入 C 字符串。插入的元素是以*s开始,直到但不包括第一个空字符的字符序列。 |
之前插入 | 插入一个字符数组从 C 字符串构造。插入的元素是范围[s, s + n)中的字符组成。请注意,此范围允许包含嵌入的空字符。 |
c | 在位置ropex 紧接在位置插入iterator mutable_rbegin() |
个副本 | 在末尾插入一个新元素。返回一个指向反转iterator insert(const iterator& p, const rope& x)void pop_front()之前。紧接在插入iterator mutable_rbegin() |
iterator insert(const iterator& p, const charT* s) | 之前插入一个 C 字符串。插入第 i 个元素之前插入 C 字符串。插入的元素是以*s开始,直到但不包括第一个空字符的字符序列。 |
之前插入 C 字符串 | 插入一个字符数组从 C 字符串构造之前。紧接在插入第 i 个元素之前插入。插入的元素是范围[s, s + n)中的字符组成。请注意,此范围允许包含嵌入的空字符。 |
charT() | iterator insert(const iterator& p, size_t n, charT c)void pop_front()之前。紧接在插入iterator mutable_rbegin() |
的 | iterator insert(const iterator& p, size_t n, charT c)void pop_back()之前。紧接在插入iterator mutable_rbegin() |
iterator insert(const iterator& p, const charT* s, size_t n) | iterator insert(const iterator& p, charT c)插入之前。紧接在插入iterator mutable_rbegin() |
void insert(size_t i, const const_iterator& f, const const_iterator& l) |
iterator insert(const iterator& p, charT c)插入之前。紧接在插入iterator mutable_rbegin() |
void insert(size_t i, const iterator& f, const iterator& l) |
iterator insert(const iterator& p, charT c)插入之前。紧接在插入iterator mutable_rbegin() |
[f, l) | void insert(size_t i, const rope& x)返回一个指向反转在插入iterator mutable_rbegin() |
之前 | 在 rope 的末尾添加 C 字符串。rope之前立即插入 C 字符串。插入的元素是以*s开始,直到但不包括第一个空字符的字符序列。 |
append(const charT* s, size_ nt) | 在 rope 的末尾添加字符数组从 C 字符串构造。rope。插入的元素是范围[s, s + n)中的字符组成。请注意,此范围允许包含嵌入的空字符。 |
插入字符 | 在末尾添加范围插入。rope. |
插入 | 中的元素。void pop_front()。rope. |
void insert(size_t i, size_t n, charT c) | 中的元素。void pop_back()在 rope 的末尾添加字符 |
之前插入 C 字符串 | 。void push_front()在*this. |
void insert(size_t i, const charT* s) | 的末尾添加绳 (rope)返回一个指向反转iterator insert(const iterator& p, const rope& x)void pop_front()在*this. |
void replace(const iterator& f, const iterator& l, const rope& x) | 用插入中的元素替换范围void push_front(). |
void replace(const iterator& f, const iterator& l, charT c) | 用插入用单个字符void pop_front(). |
擦除 | 用插入替换。用 C 字符串替换:以*s开始,直到但不包括第一个空字符的字符序列。 |
void replace(const iterator& f, const iterator& l, const charT* s, size_t n) |
用插入开始的字符序列。用范围[s, s + n). |
void replace(const iterator& f1, const iterator& l1, const charT* f2, const charT* l2) |
用[f1, l1)开始的字符序列。用范围[f2, l2). |
void replace(const iterator& f1, const iterator& l1, const const_iterator& f2, const const_iterator& l2) |
用[f1, l1)开始的字符序列。用范围[f2, l2). |
void replace(const iterator& f1, const iterator& l1, const iterator& f2, const iterator& l2) |
用[f1, l1)开始的字符序列。用范围[f2, l2). |
指向的元素 | 中的元素替换范围。在前面插入一个新元素。中的元素替换范围void push_front(). |
p | 中的元素替换范围。在前面插入一个新元素。用单个字符void pop_front(). |
void erase(const iterator& f, const iterator& l) | 中的元素替换范围。在前面插入一个新元素。替换。用 C 字符串替换:以*s开始,直到但不包括第一个空字符的字符序列。 |
擦除范围 | 中的元素替换范围。在前面插入一个新元素。开始的字符序列。用范围[s, s + n). |
void replace(const iterator& p, const charT* f, const charT* l) |
中的元素替换范围。在前面插入一个新元素。开始的字符序列。用范围插入. |
void replace(const iterator& p, const_iterator f, const_iterator l) |
中的元素替换范围。在前面插入一个新元素。开始的字符序列。用范围插入. |
void replace(const iterator& p, iterator f, iterator l) |
中的元素替换范围。在前面插入一个新元素。开始的字符序列。用范围插入. |
void erase(size_t i, size_t n) | 替换返回一个指向反转元素,从第插入个元素开始,使用void push_front(). |
个元素开始的 | 替换返回一个指向反转元素,从第插入中的元素替换。用单个字符替换第void pop_front(). |
个元素 | 替换返回一个指向反转元素,从第插入个元素。用字符数组从 C 字符串构造替换第 i 个元素:以*s开始,直到但不包括第一个空字符的字符序列。 |
void replace(size_t i, size_t n1, const charT* s, size_t n2) | 替换n1元素,从第插入个元素,从第[s, s + n2). |
void replace(size_t i, size_t n, const charT* f, const charT* l) |
替换返回一个指向反转元素,从第插入个元素开始,用范围插入. |
void replace(size_t i, size_t n, const const_iterator& f, const const_iterator& l) |
替换返回一个指向反转元素,从第插入个元素开始,用范围插入. |
void replace(size_t i, size_t n, const iterator& f, const iterator& l) |
替换返回一个指向反转元素,从第插入个元素开始,用范围插入. |
append(const charT* s) | 替换插入的字符替换第 i 个元素。void pop_front(). |
追加 C 字符串。 | 替换插入用rope中的元素替换第 i 个元素。 |
append(const charT* s, size_t) | 替换插入用 C 字符串替换第 i 个元素:以*s开始,直到但不包括第一个空字符的字符序列。 |
追加(不一定是空终止的) | 替换插入个元素,从第[s, s + n). |
的数组 | 替换插入开始的字符序列。用范围插入. |
void replace(size_t i, const const_iterator& f, const const_iterator& l) |
替换插入开始的字符序列。用范围插入. |
void replace(size_t i, const iterator& f, const iterator& l) |
替换插入开始的字符序列。用范围插入. |
append(const charT* f, const charT* l) | 返回一个新rope,其中包含单个元素,*f. [4] |
追加一个范围。 | 返回一个新rope,其中包含单个元素,*f. [4] |
rope substr(迭代器 f, 迭代器 l) const | 返回一个新rope,由范围插入. [4] |
rope substr(常量迭代器 f, 常量迭代器 l) const | 返回一个新rope,由范围插入. [4] |
rope substr(size_t i, size_t n = 1) const | 返回一个新rope组成,其元素是从位置返回一个指向反转开始的插入. [4]. |
void copy(charT* buf) const | 个字符。rope将中的字符复制到. |
size_type copy(size_type pos, size_type n, charT* buf) |
buf返回一个指向反转中,从位置pos开始rope的中的字符复制到中。如果rope包含少于pos + n个字符,则仅复制size() - pos个字符。 |
const charT* c_str() const | 返回一个指向以 null 结尾的字符序列的指针,其中包含rope中的所有字符。 [5] [6] 只要rope保持有效且未更改,则生成的字符序列至少有效。请注意,首次对此操作调用长字符串时速度较慢:它与rope. |
void delete_c_str() | 的长度呈线性关系。回收使用的内部存储空间。请注意,这会使回收返回的指针无效。 |
rope operator+(const rope& L, const rope& R) | 返回一个新rope,由L和R。这是一个全局函数,不是成员函数。 |
rope& operator+=(rope& L, const rope& R) | 的串联组成。L修改R,通过附加L。这是一个全局函数,不是成员函数。 |
rope operator+(const rope& L, const charT* s) | 返回一个新rope,由L,并返回s。以及 |
rope& operator+=(rope& L, const charT* s) | 的串联组成。L所有字符,直到但不包括第一个空字符。这是一个全局函数,不是成员函数。s,通过附加L。这是一个全局函数,不是成员函数。 |
rope operator+(const rope& L, charT c) | 返回一个新rope的字符,直到但不包括第一个空字符。返回值为L,由void pop_front()和字符 |
rope& operator+=(rope& L, charT c) | 的串联组成。L附加到其末尾构成。这是一个全局函数,不是成员函数。void pop_front()。这是一个全局函数,不是成员函数。 |
ostream& operator<<(ostream& os, rope x) | 将 x 输出void push_front()到流os。这是一个全局函数,不是成员函数。 |
注释rope[1] 有关
数据结构的详细讨论,请参阅 H.-J. Boehm、R. Atkinson 和 M. Plass 的 “Ropes: An Alternative to Strings”,《软件实践与经验》25(12):1315, 1995。char或wchar_t[2] 由于值类型通常是,因此该库引入了两个缩写crope是一个typedef为rope<char>,并且crope是一个typedefwrope.
[3] rope<wchar_t>Rope::reference不是value_type&referencecrope是一个,而是一个代理类型。事实上,是指嵌套类. charT_ref_proxyConst_reference,但仅仅是const value_type&指向。类似地,仅仅是const value_type*的常量引用,但是一个代理类型。如果rreference,那么是类型为&r的常量引用.
的对象,则类型为[4] 请注意,substrrope的返回值在概念上是一个不同的roperope:两个绳 (rope) 可能共享存储空间,但这是一个隐藏的实现细节。如果修改由rope返回的[4] 请注意,,则不会更改原始rope.
[5] 成员函数const限定符c_str()为了与 C++ 标准草案中的basic_string 接口保持一致,概念上略有不准确;绳 (rope) 会更新以缓存转换后的字符串。
[6] 允许并发调用c_str();缓存是原子更新的。