访问指定字符,有边界检查
std::basic_string<CharT,Traits,Allocator>::at
reference at( size_type pos );
const_reference at( size_type pos ) const;
返回到位于指定位置 pos
的字符的引用。进行边界检查,非法访问时抛出 std::out_of_range 类型的异常。
参数
pos | - | 要返回的字符位置 |
返回值
到请求的字符的引用。
异常
若 pos >= size() 则抛出 std::out_of_range 。
复杂度
常数。
代码示例
string str = "abcdefg hijk";
size_t size = str.size();
for (size_t i = 0; i < size; i++)
{
std::cout << "str " << i << ": " << str.at(i) << std::endl;
}
for (size_t i = 0; i < size; i++)
{
str.at(i) += 3;
}
std::cout << "str: " << str << std::endl;
try
{
// 抛出异常 ,即使容量允许访问元素
str.at(size) = 'x';
}
catch (std::out_of_range const& exc)
{
std::cout << exc.what() << std::endl;
}
访问指定字符
std::basic_string<CharT,Traits,Allocator>::operator[]
reference operator[]( size_type pos ); (1)
const_reference operator[]( size_type pos ) const; (2)
返回到位于指定位置 pos
的字符的引用。不进行边界检查。若 pos > size() ,则行为未定义。
1) 若 pos == size() ,则行为未定义。 2) 若 pos == size() ,则返回到拥有值 CharT() 的字符(空字符)的引用。 | (C++11 前) |
若 pos == size() ,则返回到拥有值 CharT() 的字符(空字符)的引用。 对于第一(非 const 版本),若修改此字符为任何异于 CharT() 的值,则行为未定义。 | (C++11 起) |
参数
pos | - | 要返回的字符位置 |
返回值
到请求字符的引用。
复杂度
常数
代码示例
string str = "abcdefg hijk";
size_t size = str.size();
for (size_t i = 0; i < size; i++)
{
std::cout << "str " << i << ": " << str[i] << std::endl;
}
for (size_t i = 0; i < size; i++)
{
str[i] += 3;
}
std::cout << "str: " << str << std::endl;