Why do I need to dereference iterators? For example in the following program
#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;
}
Why is it necessary to use isupper(*it); instead of just isupper(it);?
 
     
     
     
     
    