如何从带有const引用的函数返回非const迭代器到容器

时间:2018-01-31 02:00:11

标签: c++ c++11 templates iterator const

我正在尝试编写一个模板函数来返回容器中的词典最后一个元素。

根据我对const正确性的理解,由于函数不修改模板参数引用,因此它应该是const正确的。我如何返回非const迭代器?

换句话说,该函数不会修改容器元素,因为它是常量,但是该保证不应该扩展到返回的迭代器吗?

我希望表示该函数不会修改任何内容,但返回的迭代器可以允许调用者这样做。

#include<iterator>

template<typename T>
typename T::iterator lexicographical_last(const T& container)
{
  typename T::const_iterator b, last = container.begin();
  while (b != container.end())
    {
      if (b < last) last = b;
      ++b;
    }
  return last;
}

1 个答案:

答案 0 :(得分:3)

当你通过&#34;容器&#34;通过const引用,您承诺此函数不会对其进行修改。这包括给予非const_iterator。

如果需要返回非const_iterator,请提供一个带有可变引用的重载

template<typename T>
typename T::const_iterator lexicographical_last(const T& container);
template<typename T>
typename T::iterator lexicographical_last(T& container);