如何检查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
。
相关文章:
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 自 C++17 年以来,具有正确地址和类型的指针始终是有效的指针
- 如何检查STD :: Next(x)指向C 中的有效地址
- C++检查有效的 IP 地址或 IP
- 在UDP套接字上多次调用Connect()以发送到不同的目标地址 - 有效
- 当 std::vector 增长时,其中元素的地址不再有效
- 为什么数组元素长度的地址计算可被 2 的幂整除更有效
- WSAStringToAddress 认为"1.2.3"是有效的 IP 地址
- C++最大有效内存地址
- 通过写入全局llvm的地址从执行引擎外部初始化全局llvm值有效吗
- 我们可以检查一个指针以确保它是一个有效的地址吗
- 存储IPv4/IPv6地址的有效方式
- 从任何内存地址读取UInt32的最有效方法
- 字符 * 名称 = "Duncan" 怎么可能 ;如果指针只能保存地址,是否有效?
- 获取函数的地址并在编译时丢弃它:这是有效的c++吗?
- 局部变量的返回地址和程序仍然有效
- 带有有效地址的c++删除指针
- visualstudio2008-如何确定字符串是否是C++中的有效IPv6地址
- 有效的IP地址在unix上的c/c++库
- 受保护成员访问只有在没有得到其地址时才有效