如何检查STD::下一个(x)指向C++中的有效地址?

如何检查STD::下一个(x)指向C++中的有效地址?,c++,c++11,vector,iterator,runtime-error,C++,C++11,Vector,Iterator,Runtime Error,假设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::string的以下向量中填充了数据:

std::vector<std::string> japan;
我的问题是,有时我需要检查向量中的下一个元素相对于找到的元素,如下所示:

std::string where;

auto found = std::find(japan.begin(), japan.end(), where);
std::string here = *std::next(found);
然而,并非总是在下一个迭代器中存在某些内容,尝试访问这样一个不存在的元素会给我一个表达式:vector iterator not Dereferenced runtime错误消息,这是可以理解的


我的问题是,如何检查std::nextfound是否是一个有效地址,这样我就不会出现上述错误?

不可能只检查一个迭代器本身的有效性,因为它不包含必要的信息。您需要容器的帮助。e、 g

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;
    }
}

不可能只检查一个迭代器本身的有效性,因为它不包含必要的信息。您需要容器的帮助。e、 g

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::下一步

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

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::下一步

多谢各位。问题是,我要找的东西总是在找到一个之后。谢谢。问题是,我要找的东西总是在找到一个之后。我明白了!谢谢你的澄清,我明白了!谢谢你的澄清。