【发布时间】:2012-05-08 06:12:02
【问题描述】:
我是你们,
我在我的软件中发现了一个奇怪的错误。
在我从 std::set 中删除元素的 while 循环中,我希望始终获取第一个元素,直到容器为空:
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
}
我发现以这种方式实现第一个元素适用于 gcc,但不适用于 MSVC,它在我尝试取消引用 (*nodes.begin()) 迭代器时崩溃。
std::set 的两个实现是否表现不同?
我想要一个没有实现差异的数据结构,可以吗?
可能我必须为这种操作更改数据结构
【问题讨论】:
-
什么是“通过枢轴擦除节点中的某些元素进行一些操作”
-
像这样取消引用 *(nodes.begin())
-
请提供complete test-case 而不仅仅是这个sn-p。
-
@v01d,这应该没什么区别,
.应该比higher precedence 有*,除非实现被破坏。 (非常破碎) -
@linello 不,它没有,问题几乎肯定出在你没有发布的代码中。