【发布时间】:2021-09-18 16:48:38
【问题描述】:
我的任务是:
编写一个函数,将一对迭代器指向一个向量,然后 一个 int 值。在范围内查找该值并将迭代器返回到 请求的元素。
我对上述任务的实现是:
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
using data = vector<int>;
using iter = data::const_iterator;
iter contains(const data, iter, iter, int);
int main() {
data numbers{1, 2, 5, 7, 9, 14, 18};
iter b_iter = numbers.begin() + 2;
iter e_iter = numbers.end();
iter found = contains(numbers, b_iter, e_iter, 13);
if (found == numbers.end())
cout << "not found" << endl;
else
cout << *found << endl;
return 0;
}
iter contains(const data container, iter b_iter, iter e_iter, int num) {
while (b_iter != e_iter) {
if (*b_iter == num)
return b_iter;
b_iter++;
}
return container.end();
}
如您所见,我从头到尾迭代,如果找到搜索值则返回。否则,函数返回迭代器以传递最后一个元素 (container.end())。但是这个程序将0 输出到控制台,我期望在控制台中not found。当更新我的函数的第一个参数以引用数据而不是像这样的值时:
iter contains(const data&, iter, iter, int);
功能按预期工作,not found 被打印到终端。为什么按值传递数据不能按预期工作?
【问题讨论】: