MST

星途 面试题库

面试题:C++ STL 中 end 迭代器的常规范围扩展理解

在 C++ STL 中,我们知道 end 迭代器指向容器中最后一个元素的下一个位置。请描述一种常见的场景,在该场景中需要对 end 迭代器的迭代范围进行扩展,并给出简单代码示例说明如何实现这种扩展。
23.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

常见场景

在进行区间查找或者需要对容器中的元素范围进行扩展操作时,可能需要对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::findvec中查找值为5的元素。如果找到,就从该位置开始扩展3个位置作为新的查找范围,然后在这个新范围内查找值为8的元素,并根据查找结果输出相应信息。注意在扩展范围时,要检查新的end迭代器是否超出了容器的实际范围,如果超出则将其设为容器真正的end迭代器。