C++11关键字auto如何得到const迭代器

原创 2016年11月16日 14:32:23

auto给C++11的变量定义带来了很多方便,最主要的我认为就是迭代器的使用了

auto之前的 方法通常是typedef一个容器类型,然后以此类型名再得到迭代器类型。

auto则非常简便:

int main()
{
      std::map<int, std::string> map;
      map[1] = "hello world";
      auto iter = map.find(1);
      printf("%s", iter->second.c_str());
      return 0;
}

但是,迭代器分为const和非const迭代器,上述代码中auto得到的究竟是什么样的迭代器呢?编译器是如何推导出来的呢?

答案是:编译器的推导是按照容器是否const来进行的,如果容器是一个const变量,那么也只能调用返回const迭代器的find,自然就会得到const迭代器,否则就会得到非const类型的迭代器。

那么,如果希望得到一个const迭代器,则需要将容器也转换成const类型,例如下面的办法:

template<typename T>
const T& const_(const T& obj)
{
      return obj;
}

int main()
{
      std::map<int, std::string> map;
      map[1] = "hello world";
      auto iter = const_(map).find(1);
      iter->second = "hey world"; // 错误,无法编译通过,因为iter是一个const迭代器
      return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

【C++11】新特性 之 auto的使用

C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。 ...

C++11 你真的会用迭代器(iterator)么?

C++ STL提供了丰富的标准容器(Container)对象(vector,array,queue,list,set,unordered_map/set…),让我们可以根据需求选择不同的容器管理各种类...
  • 10km
  • 10km
  • 2015年11月22日 09:35
  • 2003

【C++11新特性】 auto关键字

熟悉脚本语言的人都知道,很多脚本语言都引入了“类型自动推断”技术:比如python,可以直接声明变量,在运行时进行类型检查。随着C++11标准的发布,C++语言也引入了类型自动推断的功能,这就是我们今...

【C++11】新特性——auto的使用

C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。 ...
  • huang_xw
  • huang_xw
  • 2013年04月06日 06:39
  • 87260

initializer_list中的const auto& 问题

void error_msg(ErrCode e, initializer_list il) { cout

操作系统的灵魂是什么?

阿里云OS与谷歌Android之争、中兴明确即将推出自主操作系统,让操作系统顿时成一热词。 飞漫软件CEO魏永明自称“码农出身”,开发过类似Android的操作系统。这两天,他特意写文一篇,向大...
  • cometwo
  • cometwo
  • 2012年10月19日 17:26
  • 797

opencv 智能指针 Ptr

//////////////////// generic_type ref-counting pointer class for C/C++ objects /////////////////////...

C++11特有的数值、数组初始化方法、常量的符号名称 const和浮点数、bool、自动推断类型auto

符号名称指出了常量表示的内容。 如果程序在多个地方使用同一个常量,则需要修改该常量的值时,只需修改一个符号定义即可。  处理符号常量的方法: 预处理器方法:#define Months 12 C++有...

C++11中的新关键字:auto与decltype

auto C++11之前,最无用的关键字 我们知道,在C++11以前,auto关键字的作用是声明函数内的局部变量为自动的变量。也就是说,它的作用是指出当前的变量为局部变量。是不是很多余?在函数里面声明...

【C++11新特性】 auto关键字

原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50469045 熟悉脚本语言的人都知道,很多脚本语言都引入了“类型自动推断”...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++11关键字auto如何得到const迭代器
举报原因:
原因补充:

(最多只允许输入30个字)