22.5 - std-string 赋值和交换
Key Takeaway
String 赋值
为字符串赋值的最简单的方法是使用重载赋值运算符 ,此外,assign()
函数也提供了类似的功能。
string& string::operator= (const string& str)
string& string::assign (const string& str)
string& string::operator= (const char* str)
string& string::assign (const char* str)
string& string::operator= (char c)
- 这些函数都对字符串进行赋值;
- 函数返回
*this
,所以可以进行链式调用; - 注意,
assign()
函数的各个版本都不能接收一个单独字符作为参数。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
输出:
1 2 3 4 5 6 |
|
assign()
成员函数还有一些其他的版本:
string& string::assign (const string& str, size_type index, size_type len)
- 将一个字符串的子串赋值给另一个字符串,从
index
开始,长度为len
- 如果索引
index
越界,则抛出out_of_range
异常; - 返回
*this
以便可以被链式调用。
例子:
1 2 3 4 5 |
|
输出:
1 |
|
string& string::assign (const char* chars, size_type len)
- 将C风格字符串数组中的
len
个字符赋值给字符串; - 如果要拷贝的长度超过最大字符个数,则抛出
length_error
异常; - 返回
*this
以便可以被链式调用。
例子:
1 2 3 4 |
|
输出:
1 |
|
这个函数存在潜在风险,不建议使用。
string& string::assign (size_type len, char c)
- 将字符c重复
len
次赋值给字符串; - 如果结果超过最大字符个数,则抛出
length_error
异常; - 返回
*this
以便可以被链式调用。
例子:
1 2 3 4 |
|
输出:
1 |
|
交换字符串
如果你有两个字符串并希望交换它们的值,那么可以使用两个名为swap()
的函数。
void string::swap (string& str)
void swap (string& str1, string& str2)
- 两个函数都可以交换两个字符串的值。成员函数会交换
*this
和str
,全局函数则交换str1
和str2
; - 这些函数是高效的,应该用来代替赋值来执行字符串交换。
例子:
1 2 3 4 5 6 7 8 |
|
输出:
1 2 3 |
|