SGI

rope<T, Alloc>

类别:容器 组件类型:类型

描述

Rope是一种可伸缩的字符串实现:它们被设计为高效地操作整个字符串。诸如赋值、连接和子字符串之类的操作所花费的时间几乎与字符串的长度无关。与 C 字符串不同,rope对于非常长的字符串(如编辑缓冲区或邮件消息)来说,是一种合理的表示形式。[1]

尽管rope可以将 rope 视为字符的 容器,并且几乎是 序列,但这很少是完成任务的最有效方法。替换一个rope中的单个字符是很慢的:每次字符替换基本上都由两个子字符串操作和两个连接操作组成。Roperope

主要针对更函数式的编程风格。vector<char>或引用计数的字符串实现在以下方面有所不同。

优点

缺点在其他编程语言中先前实现的经验表明,rope作为程序中字符串的正常或默认表示形式是一个不错的选择。在对遍历或就地更新的性能特别敏感的地方,偶尔需要使用某种类型的字符数组,例如vector<char>。但是,使用rope可以最大程度地减少由于意外的长字符串输入而导致程序运行时间变得无法容忍的情况。

可以通过rope几乎但不完全是 序列。它支持随机访问 const_iterators。向前或向后遍历每次操作花费常数时间。还提供了非常量迭代器。但是,通过非常量迭代器进行赋值是一项开销很大的操作(基本上是对数时间,但具有很大的常数)。应在频繁执行的代码中避免这种情况。

为了阻止意外使用开销很大的操作,beginendrope 上的成员函数返回const_iterator。如果需要非常量迭代器,则应使用成员函数mutable_beginmutable_end

rope的任何修改都会使引用该 rope 的常量迭代器失效。在更新后,可变迭代器引用同一rope中的相同位置。(如果迭代器引用插入点之后的位置,这可能会令人惊讶。)它们保持有效,除非迭代器引用的位置超过结果rope.

末尾的一个位置。

定义rope类和 rope 头文件是 SGI 扩展;它们不是 C++ 标准的一部分。

示例

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值类型:通常为charwchar_t. [2]  
Alloc rope的分配器,用于所有内部内存管理。 alloc

模型

随机访问容器。几乎但不完全是 前插入序列后插入序列的模型。

类型要求

无,除非 随机访问容器的要求施加的要求。

公共基类

无。

成员

成员 定义位置 描述
value_type 容器 rope的值类型,通常Tcharwchar_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 连接LR。这是一个全局函数,不是成员函数。
rope& operator+=(rope& L, const rope& R) rope R将 R 连接到 LL。这是一个全局函数,不是成员函数。
rope operator+(const rope& L, const charT* s) rope 连接Ls。这是一个全局函数,不是成员函数。
rope& operator+=(rope& L, const charT* s) rope s将 R 连接到 LL。这是一个全局函数,不是成员函数。
rope operator+(const rope& L, charT c) rope 连接Lvoid 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 的rope:
函数 描述
用于遍历 的可变 随机访问迭代器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从它派生的对象有效时保持有效。如果destroytrue,那么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,由LR。这是一个全局函数,不是成员函数。
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。charwchar_t[2] 由于值类型通常是,因此该库引入了两个缩写crope是一个typedefrope<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();缓存是原子更新的。

另请参阅

随机访问容器序列vector, sequence_buffer
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc.保留所有权利。 商标信息