如何检查STD :: Next(x)指向C 中的有效地址

How to check for std::next(x) pointing to a valid address in C++?

本文关键字:有效 地址 有效地 指向 Next 何检查 检查 STD      更新时间:2023-10-16

假设我有以下 std::string的向量填充了数据:

std::vector<std::string> japan;

,我在向量中搜索元素如下:

std::string where;
auto found = std::find(japan.begin(), japan.end(), where);

我的问题是,有时我需要检查矢量中的下一个元素,相对于"找到"一个,如下所示:

std::string here = *std::next(found);

但是,下一个迭代器并非总是有东西,并且试图访问此类不存在的元素会使我"表达:矢量迭代器不可删除可容纳"运行时错误消息,这是可以理解的。

我的问题是,如何检查std::next(found)是一个有效的地址,以免提出上述错误?

不可能仅用本身检查单个迭代器的有效性,而单个迭代器的有效性不包含必要的信息。您将需要容器的帮助。例如

auto found = std::find(japan.begin(), japan.end(), where);
if (found != japan.end()) {
    // if found is valid
    auto next = std::next(found);
    if (next != japan.end()) {
        // if next is valid
        std::string here = *next;
    }
}

可以通过使用循环来解决。

auto found = std::find(japan.begin(), japan.end(), where);
while (found != japan.end()) {
    // do something with found
    found = std::find(found, japan.end(), where);
}

这里不需要std::next