关于如何使用c ++引用的困惑

时间:2014-10-24 11:24:53

标签: c++

我是C ++的新手,我对c ++引用感到困惑,例如,std::map::insert引用,在开头,它有:

pair<iterator,bool> insert (const value_type& val);
template <class P> pair<iterator,bool> insert (P&& val);    
iterator insert (const_iterator position, const value_type& val);
template <class P> iterator insert (const_iterator position, P&& val);
template <class InputIterator>
void insert (InputIterator first, InputIterator last);  
void insert (initializer_list<value_type> il);

在后面的示例中,它使用如下插入:

mymap.insert ( std::pair<char,int>('z',200) );

我可以从哪条参考线知道我可以使用上述insert功能?

3 个答案:

答案 0 :(得分:1)

std::pair<char const, int>value_type的{​​{1}}。您引用的第一个mymap重载需要insert - const的引用。

使用标准库引用需要语言和相应库部件的基本知识。在不了解类的情况下查找成员函数它是意志的成员,在大多数情况下,不能很好地工作。如果你看一下地图的参考,你会看到value_type被定义为value_type,因为pair<const key_type, mapped_type>可以转换为pair<char, int>而适合{ - 1}} - 你还需要了解pair<char const, int>的工作原理。

答案 1 :(得分:1)

如果您在下面同一页面上阅读了参数部分,您会找到val的以下说明:

Value to be copied to (or moved as) the inserted element. Member type value_type is the type of the elements in the container, defined in map as pair<const key_type,mapped_type>

明确指出value_type是容器中元素的类型,在map中定义为pair<const key_type,mapped_type>

答案 2 :(得分:1)

假设您有一个std::map<char,int>,那么

mymap.insert ( std::pair<char,int>('z',200) );
由于map定义了单个元素构造函数

,因此允许

single element (1)  
pair<iterator,bool> insert (const value_type& val);
template <class P> pair<iterator,bool> insert (P&& val);

如果你正在使用C ++ 11,第二个应该开始。在C ++ 03中,只有第一个可用。

文档说

Member type value_type is the type of the elements in the container, defined in map as 
pair<const key_type,mapped_type>

因此std::pair<char,int>是地图的value_type,插入是有效的(临时可以绑定到左侧的const引用或C ++ 11中的右值引用)。

我并不打算同时查看cppreference,因为如果您遇到cplusplus.com问题可能会更难理解,但通常我会推荐它。