码迷,mamicode.com
首页 > 其他好文 > 详细

string对象的几种构造方法

时间:2014-12-18 22:01:20      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   color   使用   sp   div   log   bs   

在某种程度上,可以将string类型视为字符容器,支持很多容器操作。与vector相似,string的字符也是连续存储的,因此也有capacity和reserve操作。另外,也可用迭代器输出字符串,如下例:

string s("Hello world!");
string :: iterator iter = s.begin();
while(iter!=s.end())
{
    cout << *iter;
}

在创建一个string对象并初始化时,有以下几种方法(ch1、ch2、ch3为定义的字符数组):

char *ch1 = "hello world!";
char ch2[] = "goodbye";
char ch3[] = {a,b,c};

string s1;  
string s2(2,a);
string s3(s2);
string s4(s3.begin(),s3.end());
string s5(ch1);
string s6(ch2,7);
string s7(ch2+4,2);
string s8(ch3);
string s9(ch3,2);
string s10(s6,2);
string s11(s6,0,4);
string s12(s6,0,10);

 

    上述代码中s1-s9的创建中,s8的创建string对象是错误的!!!!下面分析每个对象:

  1. s1:没有采用其它对象进行初始化,而是调用了默认构造函数,因此,s1为空字符对象,即s1="";
  2. s2:采用2个字符a初始化s2,因此s2="aa";
  3. s3:s3是s2的一个副本,因此s3="aa";
  4. s4:采用两个迭代器之间的元素进行初始化s4,s3.begin()存放s3的第一个元素,s3.end()指向s3最后一个元素的下一个,但初始化为左闭合,因此不包括s3.end(),因此。s4="aa";
  5. s5:使用只有一个指针参数的构造函数定义s5,该指针指向以空字符结束的数组ch1的第一个自读,这个数组的所有字符,但不包括null(C风格字符串是以null结尾的),都被复制到新创建的s5中,s5="hello world!";
  6. s6:s6的初始化是通过一个指针和一个计数器来实现的,从这个指针指向的字符开始,复制该指针后面连续计数器个数的字符到新创建的string对象中,s6="goo";
  7. s7:s7的初始化与s6类似,但传进的指针是ch2数组中指向b的指针,s7="by";
  8. s8:s8并不是采用C风格字符串,调用这种形式的初始化式,必须是以空字符结束的数组。将不包含null的数组传递给此构造函数,将导致编译器无法检测的严重错误,只有当遇到null时,s8的初始化才会停止;
  9. s9:然而,s9的初始化是正确的,初始化包含了一个计数器,指明了需要复制的元素的个数,该元素个数必须小于数组长度,无论数组是否以null结尾都没有什么关系。s9="ab";
  10. s10:将s10初始化为s6的一个子串,第二个参数指定了开始复制的位置,从制定位置复制到最后,因此s10="odbye";
  11. s11:s11与s10是同种初始化方式,其中,第二个参数制定了开始复制字符的位置,第三个参数制定了复制的长度,因此s11="good";
  12. s12:当复制的长度超过字符串的结尾时,标准库规定只能复制到与被复制string对象结尾处,s12="goodbye"。

 

string对象的几种构造方法

标签:style   blog   ar   color   使用   sp   div   log   bs   

原文地址:http://www.cnblogs.com/HanEichy/p/4172718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!