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