📅  最后修改于: 2023-12-03 14:59:47.346000             🧑  作者: Mango
C++的string
类提供了许多方便的方法来操作字符串。其中,at()
函数是一个很有用的方法,它可以用来访问字符串中某个位置的字符。
char& at (size_t pos);
该函数接受一个size_t
类型的参数pos
,表示要访问的字符在字符串中的位置。如果该位置合法(即不超过字符串的长度),则返回该位置的字符(如果该位置的字符是可修改的,会返回一个引用,可以直接修改该字符);如果超出了字符串的长度,则会抛出一个out_of_range
异常。
下面是一个使用at()
函数的示例代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "hello world";
// 访问字符串中的第5个字符
cout << str.at(4) << endl;
// 修改字符串中的第6个字符
str.at(5) = '_';
cout << str << endl;
// 尝试访问超出字符串长度范围的字符
try {
char ch = str.at(100);
cout << ch << endl;
} catch (out_of_range e) {
cout << "Error: " << e.what() << endl;
}
return 0;
}
上面的代码输出结果为:
o
hello_world
Error: basic_string::at: __n (which is 100) >= this->size() (which is 11)
虽然at()
函数比operator[]
函数更安全(即可以检查越界),但它的效率相对较低。一般来说,在循环中访问字符串的时候,应该尽量使用operator[]
操作符,而不是at()
函数,以提高效率。
此外,由于at()
函数返回的是引用(可以修改字符),因此如果需要保持字符串的不变性,应该使用const
引用来调用该函数。例如:
const string& str = "hello";
char ch = str.at(0); // 该调用是合法的,因为使用了const引用
//str.at(0) = 'H'; // 该调用是不合法的,因为字符串是常量