使用map迭代器中遇到的问题——非const转成const类型造成的编译错误
2017-11-21 19:37
411 查看
在使用迭代器的时候,遇到下面这个问题,值得注意:
非const转成const类型造成的编译错误;
这种类型的错误,在每本书上都会被提及,但是真正在使用的的时候还是会出错,所以要好好对待这些不起眼的错误。
在for循环条件的地方,在编写程序的时候,考虑到map的操作都是进行读操作,不涉及写操作,打算使用cbegin()和cend();
但是我给迭代器的类型是 map< string,int >::iterator,是一个非const类型;
此时是将一个const类型的迭代器转换成一个非const类型,必然会发生错误。
或者:
非const转成const类型造成的编译错误;
这种类型的错误,在每本书上都会被提及,但是真正在使用的的时候还是会出错,所以要好好对待这些不起眼的错误。
错误代码示例:
#include <iostream> #include<set> #include<string> #include<map> using namespace std; int main() { map<string,int> m; string str; int n; cin>>str; cin>>n; m.insert(pair<string,int>(str,n)); for( map< string,int >::iterator it=m.cbegin(); it != m.cend(); ++it)//错误发生在这一行 { cout<<it->first<<" "<<it->second<<endl; } return 0; }
在for循环条件的地方,在编写程序的时候,考虑到map的操作都是进行读操作,不涉及写操作,打算使用cbegin()和cend();
但是我给迭代器的类型是 map< string,int >::iterator,是一个非const类型;
此时是将一个const类型的迭代器转换成一个非const类型,必然会发生错误。
正确代码:
#include <iostream> #include<set> #include<string> #include<map> using namespace std; int main() { map<string,int> m; string str; int n; cin>>str; cin>>n; m.insert(pair<string,int>(str,n)); for( map< string,int >::const_iterator it=m.cbegin(); it != m.cend(); ++it)//使用const_iterator { cout<<it->first<<" "<<it->second<<endl; } return 0; }
或者:
#include <iostream> #include<set> #include<string> #include<map> using namespace std; int main() { map<string,int> m; string str; int n; cin>>str; cin>>n; m.insert(pair<string,int>(str,n)); for( auto it=m.cbegin(); it != m.cend(); ++it)//直接使用auto类型更方便;但在平时不建议使用auto,这样可能会忘记迭代器的真正类型是什么,得不偿失! { cout<<it->first<<" "<<it->second<<endl; } return 0; }
相关文章推荐
- 使用VS.NET中遇到的问题:分析器错误信息: 未能加载类型
- 使用flashdevelop时,MXML文件中带有中文时编译错误问题解决
- 使用ICE遇到的编译问题
- 建立androd Hello遇到gen文件错误 无法编译的问题
- 关于MFC下使用MTL库编译错误的问题
- word2007的问题 此错误通常是由宏安全性设置造成的。如果您知道宏来自您信任的来源,则可将宏安全性设置更改为允许启用宏。宏安全性设置的更改方式取决于您使用的 Microsoft Office System 程序 解决方法
- Apache 2.2 使用经验谈,不易被发现的小错误会造成大问题
- 今天编译的时候遇到问题 报告R文件错误..
- 使用QSet遇到的编译错误
- Struts2.1.8 验证框架(validation)的使用中遇到的一些问题(直接访问jsp遇到的错误)
- iOS中使用opencv碰到这样的编译错误:non-const static data member must be initialized out of line
- Struts2.1.8 验证框架(validation)的使用中遇到的一些问题(直接访问jsp遇到的错误)--Allen
- 使用ubuntu x86_64位元编译Android代码遇到的library问题(solved)
- 关于MFC下使用MTL库编译错误的问题
- 使用ICE遇到的编译问题
- gcc3.4编译2.6.31 内核编译 以及 遇到的问题和错误
- 使用eclipse编译qt程序遇到问题的解决方法
- 解决 JScript 中使用日期类型数据时出现类型错误的问题
- gcc3.4编译2.6.31 内核编译以及遇到的问题和错误
- 使用VIM开发软件项目 - (16) vim编译中遇到的问题及解决方法