解引用字符迭代器 我是C++的新手,刚刚学习过迭代器。我有以下代码: //lines is a vector<string> for (auto it = lines.begin(); it != lines.end(); ++it) { //I want to access each characters in each element (string) of the vector for (auto it2 = *it->begin(); it2 != *it->end(); ++it2) { cout << *it2 << endl; //error: invalid type argument of unary '*' (have 'char') } cout << *it << endl; //ok } //行是一个向量 对于(自动it=lines.begin();it!=lines.end();+it){ //我想访问向量的每个元素(字符串)中的每个字符 对于(自动it2=*it->begin();it2!=*it->end();++it2){ 如果要将解引用*与指针成员->混合在一起,请仅使用一个: for (auto it2 = it->begin(); it2 != it->end(); ++it2) {

解引用字符迭代器 我是C++的新手,刚刚学习过迭代器。我有以下代码: //lines is a vector<string> for (auto it = lines.begin(); it != lines.end(); ++it) { //I want to access each characters in each element (string) of the vector for (auto it2 = *it->begin(); it2 != *it->end(); ++it2) { cout << *it2 << endl; //error: invalid type argument of unary '*' (have 'char') } cout << *it << endl; //ok } //行是一个向量 对于(自动it=lines.begin();it!=lines.end();+it){ //我想访问向量的每个元素(字符串)中的每个字符 对于(自动it2=*it->begin();it2!=*it->end();++it2){ 如果要将解引用*与指针成员->混合在一起,请仅使用一个: for (auto it2 = it->begin(); it2 != it->end(); ++it2) {,c++,iterator,C++,Iterator,或 问题其实就在上面这一行 for (auto it2 = *it->begin(); it2 != *it->end(); ++it2) { auto的类型实际上转换为char,因为您取消对迭代器的引用太早了。*它->begin()实际上接受string.begin()并取消对它的引用,返回一个char。要修复此问题,只需从for语句中删除迭代器取消引用,如下所示: for (auto it2 = it->begin(); it2 != it->end(); ++it


问题其实就在上面这一行

for (auto it2 = *it->begin(); it2 != *it->end(); ++it2) {
auto
的类型实际上转换为
char
,因为您取消对迭代器的引用太早了。
*它->begin()
实际上接受
string.begin()
并取消对它的引用,返回一个
char
。要修复此问题,只需从
for
语句中删除迭代器取消引用,如下所示:

for (auto it2 = it->begin(); it2 != it->end(); ++it2) {

it->begin()
string
的迭代器。
*it->begin()
取消对它的引用,给你一个
char
。当然,因为他使用的是
auto
,所以他有C++11,并且可以使用
for(std::string-line:line){for(char ch:line){…}< James Kanze >是的,我以前读过。但是我正在阅读的书中的练习是用迭代器来尝试:“@好心的USS3263252,哪本书?”@ Joseph Mansfield C++第五版,第3.22部分的练习。我重新阅读了关于箭头操作符的部分,以检查书中是否有错误,并且由于某种原因完全。在“->”示例中遗漏了缺少的“*”!Tsk!
for (auto it2 = *it->begin(); it2 != *it->end(); ++it2) {
for (auto it2 = it->begin(); it2 != it->end(); ++it2) {