请教C++迭代器

constset<TextQuery::line_no>&TextQuery::run_query(conststring&str)const{map<string,se... const set<TextQuery::line_no>& TextQuery::run_query(const string& str) const
{
map<string,set<line_no> >::const_iterator
loc=word_map.find(str);
if(loc==word_map.end())
return set<line_no>();
else
return loc->second;
}
为什么把map<string,set<line_no> >::const_iterator 改为
map<string,set<line_no> >::iterator 就会提示出错呢
展开
 我来答
滨崎步最爱
2011-04-12 · TA获得超过665个赞
知道小有建树答主
回答量:705
采纳率:0%
帮助的人:457万
展开全部
我想这个和run_query 的声明有关,由于run_query 是成员函数,且定义为const,所以视调用该函数的对象为const 对象(即视调用者*this 为const对象);而find 有两个版本,const版本 和非const 版本,在const 成员函数run_query内word_map调用的是const 版本,返回值为const_iterator类型
如果你把run_query的const性质去掉,那么*this便是普通对象,这是调用的是非const的find版本,可以用iterator了
nscboy
2011-04-11 · TA获得超过1054个赞
知道小有建树答主
回答量:826
采纳率:0%
帮助的人:555万
展开全部
word_map是如何定义的.它是否是一个const类型的对象
如果是的话.map<string,set<line_no> >::iterator这个迭代器就无法使用了
追问
有的
追答
那就是原因的
const类型的map对象无法使用iterator迭代器.只能使用const_iterator迭代器.
因为const类型的map对象是无法完成修改内容这个动作的.

同意"滨崎步最爱"
刚才没有注意到成员函数是const的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式