请教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 就会提示出错呢 展开
{
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 就会提示出错呢 展开
2个回答
展开全部
我想这个和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了
如果你把run_query的const性质去掉,那么*this便是普通对象,这是调用的是非const的find版本,可以用iterator了
展开全部
word_map是如何定义的.它是否是一个const类型的对象
如果是的话.map<string,set<line_no> >::iterator这个迭代器就无法使用了
如果是的话.map<string,set<line_no> >::iterator这个迭代器就无法使用了
追问
有的
追答
那就是原因的
const类型的map对象无法使用iterator迭代器.只能使用const_iterator迭代器.
因为const类型的map对象是无法完成修改内容这个动作的.
同意"滨崎步最爱"
刚才没有注意到成员函数是const的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询