【发布时间】:2014-08-16 20:33:54
【问题描述】:
好的,所以我是新手,我无法理解这一点。
我编写了这段代码,
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main (void)
{
vector <int> a;
int i;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
vector <int>::iterator position = find(a.begin(),a.end(),6);
cout<<*position<<"\n";
return 0;
}
我到处都读到find 函数如果没有找到任何东西会将迭代器返回到向量的末尾。因此,当我这样做并搜索向量中不存在的值6 时,它应该将迭代器返回到向量的末尾,实际上是5。在打印实际值时,它应该打印5,但它会打印0。为什么如果 find 在向量中没有找到与该值相关的任何内容,它会将迭代器返回到最后一个值,那么它会打印 0?
【问题讨论】:
-
它返回你传入的结尾,即
a.end()。取消引用a.end()是未定义的行为。 -
"t 应该将迭代器返回到向量的末尾,实际上是 5" - 不,不是,您需要阅读
std::vector::end()的文档。另外,您认为将迭代器返回到最后一个元素是否有意义?那么如何区分“未找到”和“在最后位置找到”? -
对不起,我无法区分。我的错。正如我所说,我对此并不陌生。我无法正确理解。