【发布时间】:2012-09-20 12:40:20
【问题描述】:
我是否认为这个看似无辜的代码相当危险?
template<typename T>
void insertLast(std::vector<T>& v)
{
if(v.empty()) return;
v.insert(v.begin(), v.back());
}
阅读一些答案后的一些澄清..
好吧,我并不是真的在问如何将一个元素插入到向量中,而是我做了一个虚拟的情况来质疑一个原则。换句话说,你认为有必要制作一个副本吗(这里创建了一个临时的..并且保证对临时对象的 const 引用):
template<typename T>
void insertLast(std::vector<T>& v)
{
if(v.empty()) return;
v.insert(v.begin(), T(v.back()));
}
【问题讨论】:
-
它不会编译,因为您不能在
const引用上调用insert。你认为那是危险的吗? -
它还需要
typename T来编译。 -
您不会混淆
back和end吧?这是一个简单的错误,但完全改变了代码的含义 -
如果您修复了
template<T>并删除了const,它应该可以完美运行。 -
@jozefg 在这种情况下,
insert()需要 3 个参数。