std::basic_string::assign
1) 以 count 个 ch 的副本替换内容。
basic_string& assign( size_type count, CharT ch );
2) 以 str 的副本替换内容。等价于 *this = str; 。特别是可以发生分配器传播。
basic_string& assign( const basic_string& str );
3) 以 str 的子串 [pos, pos+count) 替换内容。若请求的子串越过 string 尾,或若 count == npos ,则产生的子串是 [pos, str.size()) 。若 pos > str.size() ,则抛出 std::out_of_range 。
basic_string& assign( const basic_string& str,
size_type pos,
size_type count );
4) 用移动语义以 str 的内容替换内容。等价于 *this = std::move(str) 。特别是可以发生分配器传播。
basic_string& assign( basic_string&& str );
5) 以范围 [s, s+count) 中的字符的副本替换内容。此范围能含空字符。
basic_string& assign( const CharT* s, size_type count );
6) 以 s 所指向的空终止字符串的内容替换内容。由首个空字符,用 Traits::length(s) 确定字符串长度。
basic_string& assign( const CharT* s );
7) 以范围 [first, last) 中的字符的副本替换内容。若 InputIt 不满足遗留输入迭代器 (LegacyInputIterator) ,则此重载不参与重载决议。 (C++11 起)
template< class InputIt > basic_string& assign( InputIt first, InputIt last );
8) 以 initializer_list ilist 的内容替换内容。
basic_string& assign( std::initializer_list参数ilist );
| count | - | 产生的 string 大小 |
| pos | - | 要取的首字符下标 |
| ch | - | 用以初始化字符串的字符的值 |
| first, last | - | 复制字符来源的范围 |
| str | - | 用作源以初始化字符的 string |
| s | - | 指向用作源初始化 string 字符串的指针 |
| ilist | - | 用以初始化 string 字符的 std::initializer_list |
| 类型要求 | ||
| - InputIt 必须满足遗留输入迭代器 (LegacyInputIterator) 的要求。 |
*this
复杂度1) 与 count 成线性
2) 与 str 的大小成线性
3) 与 count 成线性
4) 常数。若给定 alloc 且 alloc != other.get_allocator() ,则为线性。
5) 与 count 成线性
6) 与 s 的大小成线性
7) 与 first 和 last 间的距离成线性
8) 与 ilist 的大小成线性
异常若因任何原因抛出异常,则此函数无效果(强异常保证)。 (C++11 起)
若操作会导致 size() > max_size() ,则抛出 std::length_error 。
调用示例 string str = "abcdefg hijk";
std::cout << "str: " << str << std::endl;
// 以 count 个 ch 的副本替换内容。
string str1(str);
str1.assign(3, 'c');
std::cout << "str1: " << str1 << std::endl;
// 以 str 的副本替换内容。等价于 *this = str
string str2(str);
str2.assign(str1);
std::cout << "str2: " << str2 << std::endl;
// 以 str 的子串 [pos, pos+count) 替换内容
string str3;
str3.assign(str, 2, 5);
std::cout << "str3: " << str3 << std::endl;
// 用移动语义以 str 的内容替换内容
string str4;
str4.assign(string("abcdef"));
std::cout << "str4: " << str4 << std::endl;
// 以范围 [s, s+count) 中的字符的副本替换内容。此范围能含空字符
string str5;
str5.assign(str.c_str(), 5);
std::cout << "str5: " << str5 << std::endl;
// 以 s 所指向的空终止字符串的内容替换内容
string str6;
str6.assign(str.c_str());
std::cout << "str6: " << str6 << std::endl;
// 以范围 [first, last) 中的字符的副本替换内容
string str7;
str7.assign(str.begin(), str.end());
std::cout << "str7: " << str7 << std::endl;
string str8;
str8.assign({'a', 'b', 'c', 'd', 'e'});
std::cout << "str8: " << str8 << std::endl;



