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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查指向C ++中有效地址的std :: next(x)?相关的知识,希望对你有一定的参考价值。

假设我有以下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);

但是,并不总是在下一个迭代器中存在某些东西,并且尝试访问这样的不存在的元素给了我“Expression:vector iterator not dereferencable”运行时错误消息,这是可以理解的。

我的问题是,我如何检查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

以上是关于如何检查指向C ++中有效地址的std :: next(x)?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查内存地址在 C 中是不是为 32 位对齐

如何让我当前的 PHP 联系表单检查输入的电子邮件地址是不是有效? [复制]

char * 到字符串文字如何有效?

C语言中如何交换两个指针变量的的值

C语言中如何显示指针所指向的数

访问空指针地址的符合 C 标准的方法?