Sla*_*lay -1 c++ iterator c++11
为什么我需要取消引用迭代器?例如,在以下程序中
#include <iostream>
#include <string>
#include <vector>
int main()
{
using namespace std;
string s("some string");
for(auto it = s.begin(); it != s.end(); && !isspace(*it); ++it)
*it = isupper(*it);
cout<<s;
}
Run Code Online (Sandbox Code Playgroud)
为什么有必要使用isupper(*it);而不仅仅是isupper(it);?
Arm*_*yan 10
迭代器是一个通用指针.它指向了一些东西.如果你有一个需要某些东西的函数(在这种情况下是char或int),而不是"指针"本身,你需要取消引用迭代器.
例如,标准advance函数将迭代器作为其参数.因此,您传递迭代器而不取消引用它,如
std::advance(it, n);
Run Code Online (Sandbox Code Playgroud)
但是如果你有一个指向int的迭代器,你想要将该整数增加4,那么你需要
(*it) += 4;
Run Code Online (Sandbox Code Playgroud)
我建议你读一本关于C++的好书.
顺便说一下,整个循环可以被一次调用替换
std::transform(s.begin(), s.end(), s.begin(), toupper);
Run Code Online (Sandbox Code Playgroud)