牛骨文教育服务平台(让学习变的简单)

实战c++中的string系列--string的连接(+= or append or push_back)

string的连接也是经常用到的,string重载了一些运算符: 
首先看一看重载+运算符,用于串联两个字符串对象: 
源码:

template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator> operator+(
      const basic_string<CharType, Traits, Allocator>& _Left,
      const basic_string<CharType, Traits, Allocator>& _Right
   );
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator> operator+(
      const basic_string<CharType, Traits, Allocator>& _Left,
      const CharType* _Right
   );
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator> operator+(
      const basic_string<CharType, Traits, Allocator>& _Left,
      const CharType _Right
   );
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator> operator+(
      const CharType* _Left,
      const basic_string<CharType, Traits, Allocator>& _Right
   );
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator> operator+(
      const CharType _Left,
      const basic_string<CharType, Traits, Allocator>& _Right
   );
template<class CharType, class Traits, class Allocator>
    basic_string<CharType, Traits, Allocator>&& operator+(
        const basic_string<CharType, Traits, Allocator>& _Left,
        const basic_string<CharType, Traits, Allocator>&& _Right
);
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator>&& operator+(
      const basic_string<CharType, Traits, Allocator>&& _Left,
      const basic_string<CharType, Traits, Allocator>& _Right
);
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator>&& operator+(
      const basic_string<CharType, Traits, Allocator>&& _Left,
      const basic_string<CharType, Traits, Allocator>&& _Right
);
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator>&& operator+(
      const basic_string<CharType, Traits, Allocator>&& _Left,
      const CharType *_Right
);
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator>&& operator+(
      const basic_string<CharType, Traits, Allocator>&& _Left,
      CharType _Right
);
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator>&& operator+(
      const CharType *_Left,
      const basic_string<CharType, Traits, Allocator>&& _Right
);
template<class CharType, class Traits, class Allocator>
   basic_string<CharType, Traits, Allocator>&& operator+(
      CharType _Left,
      const basic_string<CharType, Traits, Allocator>&& _Rig

所以使用时,注意事项:

#include<iostream>
#include<string>

int main()
{
    std::string my_str = "holiday";
    std::string my_str_add = "error" + "error";//错误
    std::string my_str_add2 = my_str + "right";
    std::string my_str_add3 = my_str + "right" + "right";
    std::string my_str_add4 = "right" + my_str;
    std::string my_str_add5 = "error" + "error" + my_str;//错误

    return 0;
}

下面开始正题! 
+= 
将字符追加到字符串

basic_string<CharType, Traits, Allocator>& operator+=(
   value_type _Ch
);
basic_string<CharType, Traits, Allocator>& operator+=(
   const value_type* _Ptr
);
basic_string<CharType, Traits, Allocator>& operator+=(
   const basic_string<CharType, Traits, Allocator>& _Right
);

append 
添加字符为字符串的末尾

basic_string<CharType, Traits, Allocator>& append(
    const value_type* _Ptr
);
basic_string<CharType, Traits, Allocator>& append(
    const value_type* _Ptr,
    size_type _Count
);
basic_string<CharType, Traits, Allocator>& append(
    const basic_string<CharType, Traits, Allocator>& _Str,
    size_type _Off,
    size_type _Count
);
basic_string<CharType, Traits, Allocator>& append(
    const basic_string<CharType, Traits, Allocator>& _Str
);
basic_string<CharType, Traits, Allocator>& append(
    size_type _Count, 
    value_type _Ch
);
template<class InputIterator>
    basic_string<CharType, Traits, Allocator>& append(
        InputIterator _First, 
        InputIterator _Last
    );
basic_string<CharType, Traits, Allocator>& append(
    const_pointer _First,
    const_pointer _Last
);
basic_string<CharType, Traits, Allocator>& append(
    const_iterator _First,
    const_iterator _Last
);

有多个重载函数,因此多种使用方法:

   string str1a ( "Hello " );
   const char *cstr1a = "Out There ";
   str1a.append ( cstr1a );

   string str1b ( "Hello " );
   const char *cstr1b = "Out There ";
   str1b.append ( cstr1b , 3 );

   string str1c ( "Hello " ), str2c ( "Wide World " );   
   str1c.append ( str2c , 5 , 5 );

   string str1d ( "Hello " ), str2d ( "Wide " ), str3d ( "World " );
   str1d.append ( str2d );
   str1d += str3d;

   string str1e ( "Hello " );
   str1e.append ( 4 , "!" );

   string str1f ( "Hello " ), str2f ( "Wide World " );
   str1f.append ( str2f.begin ( ) + 5 , str2f.end ( ) - 1 );

push_back 
将元素添加到该字符串的末尾

void push_back(
    value_type _Ch
);

这里需要注意的是,以下代码是错误的:

my_str.push_back("123");//错误
my_str.push_back("1");//ok