C++ 如何获取std::set的第一个元素

C++ 如何获取std::set的第一个元素,c++,stl,iterator,set,C++,Stl,Iterator,Set,我希望你们大家 我在我的软件中发现了一个奇怪的错误 在while循环中,我从std::set中删除元素,我希望始终获取第一个元素,直到容器为空: std::set< int*> nodes; // Fill nodes for (int i=0; i<10;i++) nodes.insert(new int); // while (!nodes.empty()) { int* pivot = (*nodes.begin()); // do some operation

我希望你们大家

我在我的软件中发现了一个奇怪的错误

在while循环中,我从std::set中删除元素,我希望始终获取第一个元素,直到容器为空:

std::set< int*> nodes;
// Fill nodes 
for (int i=0; i<10;i++)
   nodes.insert(new int);
//
while (!nodes.empty())
{
int* pivot  = (*nodes.begin());
// do some operation with pivot erasing some elements from nodes
}
std::set节点;
//填充节点

对于(int i=0;i您的代码在VS2010中运行良好,mybe您应该更新vcc。

您不能在这样的集合上使用迭代器,因为从集合中删除元素会使迭代器无效。当集合的大小低于某个阈值时(基于设置迭代器时的初始大小)它将修改堆上数据的底层存储,这将使迭代器指针指向垃圾

请参阅“迭代器有效性”下的:


(*nodes.begin())执行您想要的操作,但您不能从集合中删除您的迭代

什么是“使用透视删除节点中的某些元素执行某些操作”,只需像这样取消引用*(nodes.begin())请提供一个而不仅仅是这段代码。@v01d,这应该没有什么区别,
应该比
*
有区别,除非实现被破坏。(非常破坏)@linello不,没有,问题几乎肯定在你没有发布的代码中。