如果我使用标准库find()
函数搜索某个值的向量,下面的代码是否会返回适当的引用?如果搜索在矢量中找到所需的值,它应该返回对该值的引用。如果没有,它应该将值推到最后并返回对新值的引用。从搜索STL向量的函数中返回一个引用
我看不出来。返回a.back()
应该没问题,因为它是定义的参考。在发现我不确定的i
的情况下,它取消了迭代器的引用。
int& foo(int i)
{
std::vector<int>::iterator found = find(a.begin(), a.end(), i);
if (found != a.end())
{
return *found;
} else {
a.push_back(i);
return a.back();
}
}
我看不出来。返回a.back()
应该没问题,因为它是定义的参考。在发现我不确定的i
的情况下,它取消了迭代器的引用。可能很明显,整个观点是让函数作为左值。它当然是编译的,但我不确定它是否正确。
“或元素被重新定位,例如,由于调整的载体” - 如此特别,如果你调用'foo'然后两次第二个电话后,第一次调用的结果可能不是仍然有效。在不改变函数含义的情况下,为了避免这种情况,你唯一能做的就是用'deque'替换'vector'。 –
我将不得不考虑失败案例。在真正的代码中,这是一个稀疏矩阵类的括号运算符重载。参考资料应该足够长,以便分配,但是我无法控制别人可能用它做什么。 – Fadecomic