面试题答案
一键面试常见场景
在进行区间查找或者需要对容器中的元素范围进行扩展操作时,可能需要对end
迭代器的迭代范围进行扩展。例如,在一个有序数组中查找某个值及其之后一段范围内是否存在另一个值时,就可能需要扩展end
迭代器所界定的范围。
代码示例
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 查找值为 5 的元素
auto it = std::find(vec.begin(), vec.end(), 5);
if (it != vec.end()) {
// 扩展范围,从找到的 5 开始,再往后扩展 3 个位置
auto newEnd = it + 3;
if (newEnd > vec.end()) {
newEnd = vec.end();
}
// 在扩展后的范围内查找值为 8 的元素
auto result = std::find(it, newEnd, 8);
if (result != newEnd) {
std::cout << "在扩展范围内找到了值为 8 的元素" << std::endl;
} else {
std::cout << "在扩展范围内未找到值为 8 的元素" << std::endl;
}
}
return 0;
}
在上述代码中,首先使用std::find
在vec
中查找值为5
的元素。如果找到,就从该位置开始扩展3
个位置作为新的查找范围,然后在这个新范围内查找值为8
的元素,并根据查找结果输出相应信息。注意在扩展范围时,要检查新的end
迭代器是否超出了容器的实际范围,如果超出则将其设为容器真正的end
迭代器。