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

时间:2017-12-27 05:01:52

标签: 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);

我的问题是,有时我需要检查向量中的下一个元素是否与#34;找到&#34;一个如下:

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

然而,并不总是在下一个迭代器中存在某些东西,并且尝试访问这样的不存在的元素给了我&#34;表达式:向量迭代器不能解除引用&#34;运行时错误消息,这是可以理解的。

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

2 个答案:

答案 0 :(得分:4)

仅使用自身检查单个迭代器的有效性是不可能的,因为它没有包含必要的信息。您将需要容器的帮助。 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;
    }
}

答案 1 :(得分:1)

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

if(s.executeUpdate("select * from LCI where Heading".compareToIgnoreCase(HEADING)))

这里不需要NetBeans 8.0.2