我正在阅读 C++ Primer 5th,遇到如下代码:
string s("some string");
if (s.begin() != s.end())
{
auto it = s.begin();
*it = toupper(*it);
}
it
从迭代器接收一个值到字符串中的第一个字符s
;然后将其更改为大写toupper()
。怎么会这样it
可以取消引用吗?难道它不应该只是一个 char 类型变量而不是指针吗?
it
is an iterator:
在 C++ 中,迭代器是指向 a 中某个元素的任何对象
元素范围(例如数组或容器),具有能力
使用一组运算符迭代该范围的元素
(至少是增量 (++) 和解引用 (*) 运算符)。
迭代器最明显的形式是指针:指针可以指向
数组中的元素,并且可以使用增量迭代它们
运算符(++)。但还存在其他形式的迭代器。例如,每个
容器类型(例如向量)具有特定的迭代器类型
旨在以有效的方式迭代其元素。
请注意,虽然指针是迭代器的一种形式,但并非所有迭代器
具有与指针相同的功能;为了区分
迭代器对于特定算法应具有的要求,五个
存在不同的迭代器类别:
由于迭代器是行为类似于指针的智能对象(最初指向字符串的开头 - 这是一个容器),并迭代该容器,it
可以取消引用,如代码示例中所示。因此,一般来说it
可以用作指针。
就你而言,字符串中指针的当前位置被分配给它的大写等效值was在那个位置:
*it = toupper(*it);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)