进一步探讨 string 类型

[0. 回望复习]

之前介绍了 string 类型,表 9.12 扼要重述了在该节中介绍的 string 操作。

// 表 9.12 
string s;       定义一个新的空 string 对象,命名为 s

string s(cp);    定义一个新的 string 对象,用 cp 所指向的(以空字符 null 结束的)C 风格字符串初始化该对象

string s(s2);    定义一个新的 string 对象,并将它初始化为 s2 的副本

is >> s;       从输入流 is 中读取一个以空白字符分隔的字符串,写入 s

os << s;       将 s 写到输出流 os 中

getline(is, s)  从输入流 is 中读取一行字符,写入 s

s1 + s2        把 s1 和 s2 串接起来,产生一个新的 string 对象

s1 += s2     将 s2 拼接在 s1 后面

关系操作符    相等运算(== 和 !=)以及关系运算(<、<=、> 和 >=)
都可用于 string 对象的比较,等效于(区分大小写的)字典次序的比较

除了已经使用过的操作外,string 类型还支持大多数顺序容器操作。
在某些方面,可将 string 类型视为字符容器。
除了一些特殊操作,string 类型提供与 vector 容器相同的操作。
string 类型与 vector 容器不同的是,它不支持以栈方式操纵容器:
在 string 类型中不能使用 front、back 和 pop_back 操作。

// string 支持的容器操作有:
1.typedef:包括迭代器类型。
    (size_type, iterator, const_iterator,reverse_iterator, const_reverse_iterator, 
    difference_type, value_type, reference, const_referenc )

2. 容器构造函数。
    (C<T> c; C c(c2); C c(b, e); C c(n, t))

3. vector 容器所提供的添加元素的操作。
    (c.push_back(t); c.push_front(t); c.inset(p, t); c.insert(p, n, t); c.insert(p, b, e); )
    注意:无论 vector 容器还是 string 类型都不支持 push_front 操作。

4. 长度操作。
    (c.size(); c.max_size(); c.empty(); c.resize(); c.resize(n, t);)

5. 下标和 at 操作。
    (c[n], c.at(n) )

6. begin 和 end 操作。
    (c.begin(); c.end(); c.rbegin(); c.rend(); )

7. erase 和 clear 操作。
    (c.erase(p); c.erase(b, e); c.clear(); )

8. 赋值操作。
    (c1=c2; c1.swap(c2); c.assign(b, e); c.assign(n, t); )

9. 与 vector 容器的元素一样,string 的字符也是连续存储的。
    因此,string 类型支持 capacity 和 reserve 操作。

 

string 类型提供容器操作意味着可将操纵 vector 对象的程序改写为操纵 string 对象

例如,以下程序使用迭代器将一个 string 对象的字符以每次一行的方式输出到标准输出设备:

string s("Hiya!");
string::iterator iter = s.begin();
while (iter != s.end())
cout << *iter++ << endl; // postfix increment: print old value

除了共享容器的操作外,string 类型还支持其他本类型特有的操作。
在本节剩下的篇幅吕,我们将回顾这些 string 类型特有的操作,
包括与其他容器相关操作的补充版本,以及全新的函数。
string 类型的补充函数将在以后介绍。

string 类型为某些容器操作提供补充版本,以支持 string 特有的、不为其他容器共享的属性。
例如,好几种操作允许指定指向字符数组的指针参数。
无论字符串是否以空字符结束,这些操作都支持标准库 string 对象与字符数组之间的紧密交互作用。
其他版本则使程序员只能使用下标而不能使用迭代器。
这些版本只能通过位置操纵元素:
指定起始位置,在某些情况下还需指定一个计数器,由此指定要操纵的某个元素或一段元素。

/**
* string 库定义了大量使用重复模式的函数。
* * 由于该类型支持的函数非常多,初次阅读本节是会觉得精神疲累。 *
* 后续详细内容见《 进一步探讨 string 类型(续) 》。 *
*/

 

posted @ 2013-06-14 16:44  HandsomeDragon  阅读(182)  评论(0编辑  收藏  举报