繁体   English   中英

如何检查std :: next(x)指向C ++中的有效地址?

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

假设我的以下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在这里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM