c++迭代器使用问题

#include <stdafx.h> #include<iostream> #include <iomanip> #include <string> #include <cctype> #include <vector> using namespace std; int b=0; int main() { int i=0; vector<string> text; string copy; while(cin>>copy) text.push_back(copy); for(vector<string>::iterator iter=text.begin();iter!=text.end();iter++) { for(;(*iter)!=(*iter).end();(*iter)++) if(islower(**iter)) (**iter)=toupper(**iter); cout<<*iter<<" "; if((i+1)%8==0) cout<<endl; i++; } system("pause"); return 0; } 应该是第2个循环错了,我想试试迭代器能不能像指针那样**iter用,但编译同不过 谁帮忙解决下代码哪出问题了,求大神解答!!万分感谢

。。首先你的迭代器vector<string>::iterator iter是指向一个string的所以*iter就是一个string 你对string再 * ->**iter是什么意思呢?应该这样用 #include<iostream> #include <iomanip> #include <string> #include <cctype> #include <vector> using namespace std; int b=0; int main() { int i=0; vector<string> text; string copy; while(cin>>copy) text.push_back(copy); for(vector<string>::iterator iter=text.begin();iter!=text.end();iter++) { string::iterator iterS = (*iter).begin(); for(;iterS!=(*iter).end();iterS++) if(islower(*iterS)) (*iterS)=toupper(*iterS); cout<<*iterS<<" "; if((i+1)%8==0) cout<<endl; i++; } system("pause"); return 0; }
温馨提示:内容为网友见解,仅供参考
无其他回答

c++ STL 迭代器失效问题
1) 无法通过迭代器++,--操作遍历整个stl容器。记作: 第一层失效。2) 无法通过迭代器存取迭代器所指向的内存。 记作: 第二层失效。关于这个问题, 不同的容器对应的结果是不同的。vector vector是个连续内存存储的容器,如果vector容器的中间某个元素被删除或从中间插入一个元素, 有可能导致内存空间...

c++:如何判断迭代器失效?
c++语言中,迭代器用于遍历容器中的元素。迭代器自身是不知道是否“失效”的,它仅是一个迭代对象的封装。当谈及迭代器“失效”,通常指的是在创建迭代开始时,迭代器预期迭代的元素序列就已经确定。若在迭代过程中,实际迭代序列与预期序列不同,便可能认为迭代器失效。不同容器的迭代器失效情况各异。...

为什么在c++中不能在“map”的迭代器中使用“+1”?
总之,在C++中,map的迭代器不支持使用+运算符直接进行位置加一操作。正确的做法是使用std::advance函数来实现这个功能。对于自定义迭代器类,需要明确实现+运算符以符合迭代器的语义。

C++ 中我运行erase()的时候 老是出现这个 看不懂啊
string的迭代器不能递减。改成:int main(){string str="This IS A example";for(string::iterator iter=str.begin(); iter!=str.end();){if(isupper(*iter))iter = str.erase(iter);elseiter++;}cout << str;}或 int main(){string str="This IS A example";str.erase(remove_if(...

如何使用迭代器c++
输出迭代器 只能写,不能读,而且只支持 ++ 自增运算 在每个要遍历的地方只能写一次 ostream_iterator 为常见的输出迭代器 请点击输入图片描述 前向迭代器 提供读和写操作,但只使用 ++ 运算符来遍历容器。也就是每次沿容器向前移动一个元素。总是按相同的顺序遍历容器的值。泛型算法 replace 需要前...

C++:在遍历\/循环中删除map元素, 如何避免iter 迭代器失效
如果你在不知情的情况下使用了失效的迭代器,后果是不可预料的。可能程序立即崩掉,也可能什么事都没有发生。崩掉了算你 幸运,因为你至少知道出了问题,不然有你受的。回到正题,我想说什么呢?比如:程序代码map<string,int> theMap;\/\/ add something to theMap...for(auto iter1 = theMap....

C++erase函数的使用
首先,越界问题。当你指定的范围超出了向量的界限,这将导致运行时错误。确保在调用erase之前,所指的索引位置在有效范围内,即0到向量实际元素数量减一。其次,用法错误。erase函数实际上需要一个迭代器作为参数,而不是直接提供索引。正确的做法是使用begin()函数获取向量的第一个元素的迭代器,然后进行...

C++一个类模板里使用迭代器的问题
编译器说的再清楚不过了 typedef list<HashedObj>::iterator Litr;'std::list<HashedObj>::iterator'前面要加'typename'指示这是一个类型的名字,因为 'std::list<HashedObj>'是dependent scope,不能自动判断其成员iterator是类型还是变量

有关C++ STL的两个问题(有关时间复杂度)
第一个问题:advance函数用在“随机访问迭代器”上时,时间复杂度是常数,即O(1)。所谓随机访问迭代器,简单地说就是该迭代器支持加法和减法操作符。比如,std::vector::iterator就是一种random access iterator,而std::list::iterator就不是。两者区别在于:如果你有一个vector::iterator,变量名是...

c++,string迭代器超出范围出错
大至上,iter--是不导致崩溃的,而是这样做后再引用它时才崩溃。VC6.0那是应该是0应该是转换了,可能VC6的iteator就是个ptrdiff_t的typedef(而ptrdiff_t是int的typedef),但VS2010的却没有那么简单。

相似回答