地图和迭代器(IN)验证
Map and iterator (in)validation
我有偶尔需要清洁的map
中存储的项目缓存。map::erase
无效curr
迭代器,因此我想维护next
指针,以防curr
删除。
问题:如果我 erase
curr
处的元素,是否无效next
?我不相信它可以,但是我想确定我不会错过map::erase
中明显的东西)。
以下代码也无法使用error: no match for ‘operator+’ in ‘curr + 1’
编译:
typedef map<string, SSL_CTX_ptr> Contexts;
...
Contexts::const_iterator curr, next;
curr = contexts.begin();
while (curr != contexts.end())
{
if(IsOkToRemove(curr))
{
next = curr + 1;
contexts.erase(curr);
curr = next;
continue;
}
curr++;
}
问题:如何将next
设置为curr
之后的元素?
编辑: Kerrek的示例下面是我试图理解的确切情况:
contexts.erase(it++);
在erase
中,删除了该元素。这意味着呼叫者的迭代器到同一元素在邮寄增量发生之前将无效。因为迭代器是无效的,所以这是我试图在上面尝试curr + 1
的原因。这是我要确保next
始终有效的原因。
这样:
for (auto it = contexts.begin(); it != contexts.end(); )
{
if (IsOkToRemove(it)) { contexts.erase(it++); }
else { ++it; }
}
由于C 11,您也可以说it = contexts.erase(it);
,因为erase
已更改以将迭代器返回C 中的删除元素。
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- 正在尝试了解输入验证循环
- 如何在C++中检查2D数组中负值的输入验证
- C++ MFC Libraries in Travis CI
- LibGit2 SSH身份验证失败
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- constexpr上下文中std::initializer_list的验证
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 正在验证c++中用户的整数输入
- 有人安装"IITB Simplecpp in mac"吗?
- 加密++验证大文件签名
- C++卡验证问题
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 地图和迭代器(IN)验证
- 在C++中使用libCurl API的身份验证SAIO(swift all in one)