我正在尝试编写一个模板函数来返回容器中的词典最后一个元素。
根据我对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;
}
答案 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);