gpt4 book ai didi

c++ - std::map 多个迭代器、删除及其值

转载 作者:行者123 更新时间:2023-11-30 02:45:37 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <iostream>
#include <map>
#include <string>
#include <stdlib.h>

using namespace std;

class Fix
{

};

int main()
{
map<int, Fix *> m;

Fix * f = new Fix();
m.insert( make_pair( 2, f) );

m.insert( make_pair( 3, f) );

map<int, Fix *>::iterator it = m.find(2);
map<int, Fix *>::iterator it1 = m.find(2);


m.erase(it);

// Will Create problem
// m.erase(it1);

// Still value is there
// So from the map node, iterator copy its value ?
printf("%d\n", it->first);
printf("%d\n", it1->first);

}

我有一个 Map 包含两个条目,还有两个指向同一条目的迭代器。使用 Iterator1 从 map 中删除了一个条目。删除后 Iterator1 和 Iterator2 仍然保持值。

问题

  1. Iterator是否指向Map的节点(红黑树)
  2. 迭代器在迭代时是否处理来自节点的键和值?因此,即使条目从 map 中删除后,它仍保留该值。

最佳答案

对于 std::map::erase 使用 this method在迭代器上具有以下效果:

  • 从容器中移除指定的元素

  • 对已删除元素的引用和迭代器无效。其他引用和迭代器不受影响。

因此,在删除it 之后,您将无法使用it1,即使it1 仍然可以巧合地指向“现在无效”的先前内存。

关于c++ - std::map 多个迭代器、删除及其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com