使用常量引用形式,将map作为形参传递时的问题

void test(const unordered_map<int,int> &um){
  if(um[1]){
    //一段测试代码
  }
}

上述代码将不能通过编译。

原因:map的[]运算符会在索引项不存在的时候自动创建一个对象,而常量不能改变。

解决办法:使用迭代器替换即可,如下例所示。

void test(const unordered_map<int,int> &um) {
	unordered_map<int, int>::const_iterator it = um.begin();
	for (; it != um.end(); ++it) {
		//balabala
	}
}

注意:

因为传入的um参数是常量类型的,因此um.begin()也是常量指针,因此只能将其赋值给常量指针const_iterator。

展开阅读全文

没有更多推荐了,返回首页