#include <iostream>#include <set>using namespace std;int main(){ set<int> data; data.insert(0); data.insert(1); data.insert(2); data.insert(3); data.insert(4); set<int>::iterator iter; for(iter=data.begin();iter!=data.e
最近工作中需要使用平衡树维护
操作
。遂调用了
C++
标准库里的
set
,在确保解题思路没有出错的情况下,我发现自己始终有一组样例无法通过。在检查了很久的细节并找了标程对跑中间过程以后,我发现我在使用
set
做
删除
的时候,迭代器发生了和我预想不一样的变化。
我在一个函数中调用了
set
的erase
操作
来
删除
某个迭代器,函数的传入参数为要
删除
的迭代器,类似如下
set
<int> aha;
void del(
set
<int>::iterator it)
//一顿
操作
aha.erase(it);
然后我在main中想要
删除
一个迭代器,并左移一位或右移一位迭代器,类似如下
int main
直接上代码
std::
set
<int>::iterator it =
set
INT.begin();for (; it !=
set
INT.end();){if (*it < 4 ||*it > 7){
//保存要
删除
的指针std::
set
<int>::iterator itmp = it;it++;
set
INT.er...
set
.add("c");
Set
<String>
set
s
Set
= new Hash
Set
<String>(
set
);
Iterator<String> iterator =
set
s
Set
.iterator();
while(iterator.hasNext(
容器是非常便捷常用的,经常用容器来存储多条数据,然后对数据进行增删查改。
有时要在
遍历
的同时
删除
一条数据,但是这样
删除
的时候程序会导致程序崩溃。
这个问题在GCC 中不会出现,而在VS2008,VS2010 中都有,其它更高VS版本未测试。
比如map 容器:
map<int, string> dataMap;
for (int i = 0; i < 10; ++i...
// A code block
Iterator<Element<L>> iterator = repeat.iterator();
while(iterator.hasNext()) {
Element<L> elem = iterator.next();
if(elem.getLabel().equals(la
C++
遍历
删除
元素
转自:http://zencoder.info/2019/10/11/erase-element-from-container/
今天看到一个patch fix从std::map中
遍历
删除
元素导致crash问题,突然意识到自己对如何正确地从map等
C++
容器中
删除
元素也没有很牢固清醒的认知。重新梳理了下这块的正确做法,记录在此,以备后忘。
C++
的容器按存储方式分为两类:
以数组形式存储的顺序容器,如:vector,deque
以不连续节点形式存储的容易,如:
list
, se
set
/multi
set
属于关联式容器,底层结构是用红黑树实现。
set
和multi
set
区别:
set
不允许容器中有重复的元素 multi
set
允许容器中有重复的元素
set
构造和赋值
功能描述:
创建
set
容器以及赋值
set
<T> st; //默认构造函数:
set
(const
set
&st); //拷贝构造函数
set
& operator=(const