【发布时间】:2018-07-10 01:00:21
【问题描述】:
我正在尝试编写一个模板函数来返回容器中按字典顺序排列的最后一个元素。
根据我对 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;
}
【问题讨论】:
-
C++ 不支持这种微妙之处,抱歉。在一般情况下,您只需让函数引用非
const参数。对于一些特殊情况,例如std::vector,可以让函数只返回一个索引,而对于其他一些特殊情况,容器类型可能会提供某种方法来将返回的 const 迭代器转换为普通的变异迭代器。 -
请注意,显示的代码 (1) 使用了可能未初始化的变量
b,并且 (2) 比较迭代器而不是它们所引用的项目。
标签: c++ c++11 templates iterator constants