跳到主要内容

std::string append() 方法

// (1) Non const version only
constexpr basic_string& append( size_type count, CharT ch );

// (2) Non const version only
constexpr basic_string& append( const basic_string& str );

// (3) Non const version only
constexpr basic_string& append( const basic_string& str,
size_type pos, size_type count = npos );

// (4) Non const version only
constexpr basic_string& append( const CharT* s, size_type count );

// (5) Non const version only
constexpr basic_string& append( const CharT* s );

// (6) Non const version only
template< class InputIt >
constexpr basic_string& append( InputIt first, InputIt last );

// (7) Non const version only
constexpr basic_string& append( std::initializer_list<CharT> ilist );

// (8) Non const version only
template < class StringViewLike >
constexpr basic_string& append( const StringViewLike& t );

// (9) Non const version only
template < class StringViewLike >
constexpr basic_string& append( const StringViewLike& t,
size_type pos, size_type count = npos );

将字符添加到字符串中。

  • (1) 追加 count 个字符 ch 的副本。

  • (2) 追加字符串 str

  • (3) 追加 str 的子字符串 [pos, pos + count)
    如果请求的子字符串超出字符串的末尾,或者如果 count == npos,则追加的子字符串为 [ pos, size() )
    如果 pos > str.size(),则抛出std::out_of_range

  • (4) 追加范围 [ s, s + count ) 中的字符。
    此范围可以包含空字符。

  • (5) 追加 s 指向的空终止字符字符串。
    字符串的长度由使用 Traits::length(s) 的第一个空字符决定。

  • (6) 追加范围 [ first, last ) 中的字符。

    重载决议

    只有当 InputIt 符合 LegacyInputIterator 时,此重载才参与重载决议。

  • (7) 从初始化列表 ilist 追加字符。

  • (8)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后追加 sv 中的所有字符,如同通过 append(sv.data(), sv.size())

    重载决议

    只有当 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时,此重载才参与重载决议。

  • (9)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后追加 sv 子视图 [ pos, pos + count ) 中的字符。
    如果请求的子视图超出 sv 的末尾,或者如果 count == npos,则追加的子视图为 [ pos, sv.size() )
    如果 pos >= sv.size(),则抛出std::out_of_range

    重载决议

    只有当 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时,此重载才参与重载决议。

参数

  • count - 要追加的字符数
  • pos - 要追加的第一个字符的索引
  • ch - 要追加的字符值
  • first, last - 要追加的字符范围
  • str - 要追加的字符串
  • s - 指向要追加的字符字符串的指针
  • ilist - 包含要追加字符的std::initializer_list
  • t - 可转换为std::basic_string_view且包含要追加字符的对象

返回值

*this

复杂度

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

没有标准的复杂度保证,典型的实现行为类似于std::vector::insert()

异常

如果操作导致 size() > max_size(),则抛出std::length_error

在任何情况下,如果由于任何原因抛出异常,此函数无效(强异常保证)。 (自 C++11 起)

示例

Main.cpp
#include <string>
#include <iostream>

int main() {
std::basic_string<char> str = "string";
const char* cptr = "C-string";
const char carr[] = "Two and one";

std::string output;

// 1) Append a char 3 times.
// Notice, this is the only overload accepting chars.
output.append(3, '*');
std::cout << "1) " << output << "\n";

// 2) Append a whole string
output.append(str);
std::cout << "2) " << output << "\n";

// 3) Append part of a string (last 3 letters, in this case)
output.append(str, 3, 3);
std::cout << "3) " << output << "\n";

// 4) Append part of a C-string
// Notice, because `append` returns *this, we can chain calls together
output.append(1, ' ').append(carr, 4);
std::cout << "4) " << output << "\n";

// 5) Append a whole C-string
output.append(cptr);
std::cout << "5) " << output << "\n";

// 6) Append range
output.append(&carr[3], std::end(carr));
std::cout << "6) " << output << "\n";

// 7) Append initializer list
output.append({ ' ', 'l', 'i', 's', 't' });
std::cout << "7) " << output << "\n";
}
输出
1) ***
2) ***string
3) ***stringing
4) ***stringing Two
5) ***stringing Two C-string
6) ***stringing Two C-string and one
7) ***stringing Two C-string and one list
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。

std::string append() 方法

// (1) Non const version only
constexpr basic_string& append( size_type count, CharT ch );

// (2) Non const version only
constexpr basic_string& append( const basic_string& str );

// (3) Non const version only
constexpr basic_string& append( const basic_string& str,
size_type pos, size_type count = npos );

// (4) Non const version only
constexpr basic_string& append( const CharT* s, size_type count );

// (5) Non const version only
constexpr basic_string& append( const CharT* s );

// (6) Non const version only
template< class InputIt >
constexpr basic_string& append( InputIt first, InputIt last );

// (7) Non const version only
constexpr basic_string& append( std::initializer_list<CharT> ilist );

// (8) Non const version only
template < class StringViewLike >
constexpr basic_string& append( const StringViewLike& t );

// (9) Non const version only
template < class StringViewLike >
constexpr basic_string& append( const StringViewLike& t,
size_type pos, size_type count = npos );

将字符添加到字符串中。

  • (1) 追加 count 个字符 ch 的副本。

  • (2) 追加字符串 str

  • (3) 追加 str 的子字符串 [pos, pos + count)
    如果请求的子字符串超出字符串的末尾,或者如果 count == npos,则追加的子字符串为 [ pos, size() )
    如果 pos > str.size(),则抛出std::out_of_range

  • (4) 追加范围 [ s, s + count ) 中的字符。
    此范围可以包含空字符。

  • (5) 追加 s 指向的空终止字符字符串。
    字符串的长度由使用 Traits::length(s) 的第一个空字符决定。

  • (6) 追加范围 [ first, last ) 中的字符。

    重载决议

    只有当 InputIt 符合 LegacyInputIterator 时,此重载才参与重载决议。

  • (7) 从初始化列表 ilist 追加字符。

  • (8)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后追加 sv 中的所有字符,如同通过 append(sv.data(), sv.size())

    重载决议

    只有当 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时,此重载才参与重载决议。

  • (9)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后追加 sv 子视图 [ pos, pos + count ) 中的字符。
    如果请求的子视图超出 sv 的末尾,或者如果 count == npos,则追加的子视图为 [ pos, sv.size() )
    如果 pos >= sv.size(),则抛出std::out_of_range

    重载决议

    只有当 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时,此重载才参与重载决议。

参数

  • count - 要追加的字符数
  • pos - 要追加的第一个字符的索引
  • ch - 要追加的字符值
  • first, last - 要追加的字符范围
  • str - 要追加的字符串
  • s - 指向要追加的字符字符串的指针
  • ilist - 包含要追加字符的std::initializer_list
  • t - 可转换为std::basic_string_view且包含要追加字符的对象

返回值

*this

复杂度

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

没有标准的复杂度保证,典型的实现行为类似于std::vector::insert()

异常

如果操作导致 size() > max_size(),则抛出std::length_error

在任何情况下,如果由于任何原因抛出异常,此函数无效(强异常保证)。 (自 C++11 起)

示例

Main.cpp
#include <string>
#include <iostream>

int main() {
std::basic_string<char> str = "string";
const char* cptr = "C-string";
const char carr[] = "Two and one";

std::string output;

// 1) Append a char 3 times.
// Notice, this is the only overload accepting chars.
output.append(3, '*');
std::cout << "1) " << output << "\n";

// 2) Append a whole string
output.append(str);
std::cout << "2) " << output << "\n";

// 3) Append part of a string (last 3 letters, in this case)
output.append(str, 3, 3);
std::cout << "3) " << output << "\n";

// 4) Append part of a C-string
// Notice, because `append` returns *this, we can chain calls together
output.append(1, ' ').append(carr, 4);
std::cout << "4) " << output << "\n";

// 5) Append a whole C-string
output.append(cptr);
std::cout << "5) " << output << "\n";

// 6) Append range
output.append(&carr[3], std::end(carr));
std::cout << "6) " << output << "\n";

// 7) Append initializer list
output.append({ ' ', 'l', 'i', 's', 't' });
std::cout << "7) " << output << "\n";
}
输出
1) ***
2) ***string
3) ***stringing
4) ***stringing Two
5) ***stringing Two C-string
6) ***stringing Two C-string and one
7) ***stringing Two C-string and one list
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。