string类的构造函数

来源:互联网 发布:软件维护招标文件 编辑:程序博客网 时间:2024/06/05 16:13
string 类的构造函数:string 类有 6 种形式的构造函数,string 类是 basic_string 类的特化版本,因此他的构造函数就
是 basic_string 模板类的 char 特化版本的构造函数,在这里我们省略掉其他复杂的形式,得到以下的 string 构造函数

版本,具体的 basic_string 模板类的构造函数这里不讨论。


a、 string(const char *s);将 string 对象初始化为 s 指向的传统 C 字符串(即以空字符结束的字符串)。比如 string 
one(“hyong”);将 string 对象 one 用字符串 hyong 来初始化。这就意味着可以把 char 类型的数组转换为 string 对象,
比如 string a; char b[]=”ldki”; 则 a=b; string c=b;都是正确的。但不能将 string 对象的字符串转换为 char 类型的数组。
b、string(size_type n,char c);创建一个包含 n 个元素的对象,其中每个元素都被初始化为字符 c。比如 string two(10, ‘c’);
将string对象two初始化包含为十个字符c。这意味着不可以用单个字符来初始化string类型的对象,比如string a=’s’;
将发生错误。
c、string();创建一个默认的 string 对象,长度为 0。比如 string three;即表示创建一个长度为 0 的字符串对象 three。
d、string(const string &str, size_type pos=0, size_type n=npos);将 string 对象初始化为 string 对象的字符串从 pos 开始到
结尾的字符,或从 pos 开始的 n 个字符。
e、string(const char *s, size_type n);将 string 对象初始化为 s 指向的传统 C 字符串中的前 n 个字符,即使超出了字符串的范围,操作仍会进行。比如 char all[]=”hyong”; string five(all, 5);表示用字符数组 all 的前 5 个字符来初始化 string对象 five。注意即使复制的长度超出了数组的长度,操作仍将进行,也就是说如果把 5 改为 10 的话,将导致 5 个无用的字符被复制到对象中。
f、tempalte<class Iter>string(Iter begin, Iter end);将 string 对象初始化为[begin, end]间的字符,其中 begin 和 end 就像指针,用于指定位置,范围包括 begin 在内,但不包括 end,注意不包括 end。还要注意 begin 和 end 被看着指针,也就是说 char all[ ]=”hyongilfmm”; string seven(all+2, all+4)将使用从第 all+2 的字符 o 开始到第 all+3 的字符 n 初始化对象 seven,最后 seven 为”on”。因为字符串从 0 开始计数,所以这里从第 3 个字符开始。而 all+3 指的是第 4 个字符,注意 all+4 指的是第 5 个字符,这里不以第 5 个字符 g 结束,因为该构造函数不包括 end 在内。还要注意,对begin 和 end 被看着指针指向某一位置,也就是说 string a=”hyong”;string b(a+3, a+5);是错误的,因为 a 是 string 类对象,不是指针,所以 a+3 没有意义,所以这里应这样 string b(&a[3], &a[5])这里 a[3]是一个 char 值,&a[3]是一个地址。
0 0
原创粉丝点击