- string s7 = "hello" + ", " + s2; // error: can't add string literals
-
string s("Hello World!!!"); // punct_cnt has the same type that s.size decltype(s.size()) punct_cnt = 0; // count the number of punctuation characters in s for(autoc:s) if (ispunct(c)) ++punct_cnt; cout << punct_cnt // forevery char in s // if the character is punctuation // increment the punctuation counter << " punctuation characters in " << s << endl;
-
string s("Hello World!!!"); // convert s to uppercase for (auto &c : s) // for every char in s (note: c is a reference) c = toupper(c); // c is a reference, so the assignment changes the char in s cout << s << endl;
- cctype header includes some operations like ispunct(), toupper().
-
for (decltype(s.size()) index = 0; index != s.size() && !isspace(s[index]); ++index) s[index] = toupper(s[index]); // capitalize the current character
-
The subscript operator onvector(and string) fetches an existingelement; it does not add an element.
vector<int> ivec; // empty vector for (decltype(ivec.size()) ix = 0; ix != 10; ++ix) ivec[ix] = ix; // disaster: ivec has no elements
However, it is in error:ivecis an empty vector; there are no elements to subscript!
As we’ve seen, the right way to write this loop is to usepush_back:
for (decltype(ivec.size()) ix = 0; ix != 10; ++ix) ivec.push_back(ix); // ok: adds a new element with value ix