F.2 数据信息、构造函数及其他(1)
可以根据其效果来描述构造函数。由于类的私有部分可能依赖于实现,因此可根据公用接口中可用的数据来描述这些效果。表F.1列出了一些方法,它们的返回值可用来描述构造函数和其他方法的效果。注意,其中的大部分术语来自STL。
表F.1一些string数据方法
|
方 法< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
返 回 值 |
|
begin( ) |
指向字符串第一个字符的迭代器 |
|
cbegin( ) |
一个const_iterator,指向字符串中的第一个字符(C++(www.cppentry.com)11) |
|
end( ) |
为超尾值的迭代器 |
|
cend( ) |
为超尾值的const_iterator(C++(www.cppentry.com)11) |
|
rbegin( ) |
为超尾值的反转迭代器 |
|
crbegin( ) |
为超尾值的反转const_iterator(C++(www.cppentry.com)11) |
|
rend( ) |
指向第一个字符的反转迭代器 |
|
crend( ) |
指向第一个字符的反转const_iterator(C++(www.cppentry.com)11) |
|
size( ) |
字符串中的元素数,等于begin( )到end( )之间的距离 |
|
length( ) |
与size( )相同 |
|
capacity( ) |
给字符串分配的元素数。这可能大于实际的字符数,
capacity( ) – size( )的值表示在字符串末尾附加多少
字符后需要分配更多的内存 |
|
max_size( ) |
字符串的最大长度 |
续表
|
方 法 |
返 回 值 |
|
data( ) |
一个指向数组第一个元素的const charT*指针,
其第一个size( )元素等于*this控制的字符串中对
应的元素,其下一个元素为charT类型的charT(0)
字符(字符串末尾标记)。当string对象本身被修
改后,该指针可能无效 |
|
c_str( ) |
一个指向数组第一个元素的const charT*指针,其第
一个size( )元素等于*this控制的字符串中对应的
元素,其下一个元素是charT类型的charT(0)
字符(字符串尾标识)。当string对象本身
被修改后,该指针可能无效 |
|
get_allocator( ) |
用于为字符串object分配内存的allocator对象的副本 |
请注意begin( )、rend( )、data( )和c_str( )之间的差别。它们都与字符串的第一个字符相关,但相关的方式不同。begin( )和rend( )方法返回一个迭代器,正如第16章讨论的,这是一种广义指针。具体地说,begin( )返回一个正向迭代器模型,而rend( )返回反转迭代器的一个副本。这两种方法都引用了string对象管理的字符串(由于string类使用动态内存分配,因此实际的string内容不一定位于对象中,因此,我们使用术语"管理"来描述对象和字符串之间的关系)。可以将返回迭代器的方法用于基于迭代器的STL算法中。例如,可以使用STL reverse( )函数来反转字符串的内容:
而data( )和c_str( )方法返回常规指针。另外,返回的指针将指向存储字符串字符的数组的第一个元素。该数组可能(但不一定)是string对象管理的字符串的副本(string对象采用的内部表示可以是数组,但不一定非得是数组)。由于返回的指针可能指向原始数据,而原始数据是const,因此不能用它们来修改数据。另外,当字符串被修改后,将不能保证这些指针是有效的,这表明它们可能指向原始数据。data( )和c_str( )的区别在于,c_str( )指向的数组以空值字符(或与之等价的其他字符)结束,而data( )只是确保实际的字符串字符是存在的。因此,c_str( )方法期望接受一个C-风格字符串参数:
同样,data( )和size( )可用作这种函数的参数,即接受指向数组元素的指针和表示要处理的元素数目的值:
C++(www.cppentry.com)实现可能将string对象的字符串表示为动态分配的C-风格字符串,并使用char*指针来实现正向迭代器。在这种情况下,实现可能让begin( )、data( )和c_str( )都返回同样的指针,但返回指向3个不同的数据对象的引用也是合法的(虽然更复杂)。