std::string append() 方法
- 自 C++20 起
- 自 C++17 起
- 自 C++14 起
- 自 C++11 起
- 直到 C++11
// (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) Non const version only
basic_string& append( size_type count, CharT ch );
// (2) Non const version only
basic_string& append( const basic_string& str );
// (3) Non const version only
basic_string& append( const basic_string& str,
size_type pos, size_type count = npos );
// (4) Non const version only
basic_string& append( const CharT* s, size_type count );
// (5) Non const version only
basic_string& append( const CharT* s );
// (6) Non const version only
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
// (7) Non const version only
basic_string& append( std::initializer_list<CharT> ilist );
// (8) Non const version only
template < class StringViewLike >
basic_string& append( const StringViewLike& t );
// (9) Non const version only
template < class StringViewLike >
basic_string& append( const StringViewLike& t,
size_type pos, size_type count = npos );
// (1) Non const version only
basic_string& append( size_type count, CharT ch );
// (2) Non const version only
basic_string& append( const basic_string& str );
// (3) Non const version only
basic_string& append( const basic_string& str,
size_type pos, size_type count = npos );
// (4) Non const version only
basic_string& append( const CharT* s, size_type count );
// (5) Non const version only
basic_string& append( const CharT* s );
// (6) Non const version only
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
// (7) Non const version only
basic_string& append( std::initializer_list<CharT> ilist );
// (1) Non const version only
basic_string& append( size_type count, CharT ch );
// (2) Non const version only
basic_string& append( const basic_string& str );
// (3) Non const version only
basic_string& append( const basic_string& str,
size_type pos, size_type count );
// (4) Non const version only
basic_string& append( const CharT* s, size_type count );
// (5) Non const version only
basic_string& append( const CharT* s );
// (6) Non const version only
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
// (7) Non const version only
basic_string& append( std::initializer_list<CharT> ilist );
// (1) Non const version only
basic_string& append( size_type count, CharT ch );
// (2) Non const version only
basic_string& append( const basic_string& str );
// (3) Non const version only
basic_string& append( const basic_string& str,
size_type pos, size_type count );
// (4) Non const version only
basic_string& append( const CharT* s, size_type count );
// (5) Non const version only
basic_string& append( const CharT* s );
// (6) Non const version only
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
将字符添加到字符串中。
-
(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 ) 中的字符。
- 自 C++11 起
- 直到 C++11
重载决议只有当
InputIt
符合LegacyInputIterator
时,此重载才参与重载决议。如果
InputIt
是整数类型,此重载与重载 (1) 具有相同的效果。 -
(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>>
为true
且std::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>>
为true
且std::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
。
示例
#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