[英]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.