【发布时间】:2016-04-06 08:54:48
【问题描述】:
我正在排序点,我为排序部分编写的代码运行良好,但我有一个问题。每隔一段时间(在随机时间)随机点被添加到向量的末尾,当我尝试 pop_back() 删除这些最后的元素时(因为我写了一小部分来检查以确保点的数量是同样),我最终陷入无限循环,试图删除这些最后的元素,这些元素不会消失。有什么我应该知道的吗?即使我不尝试删除它们,一些点也会随机消失。我试图了解我需要做些什么来防止这些奇怪的点弹出,因为这些点是按特定顺序排序的。
我只有三个insert方法,第一个是emplace_back(),下一个是insert,最后也是insert方法:
if (afterX >= spheres.capacity())
spheres.emplace_back(center);
else if(afterX == -1)
spheres.insert(spheres.begin(),center);
else
spheres.insert(std::next( spheres.begin(), afterX ),center);
elementCount++;
这是我的输出,以供参考:
Point: <5,0,0>
zFind: -1
<5,0,0>
Point: <10,0,0>
zFind: 0
yFind: 0
<5,0,0><10,0,0>
Point: <100,0,0>
zFind: 0
yFind: 0
<5,0,0><10,0,0><100,0,0><2.11207e-023,0,0>
Point: <30,0,0>
zFind: 0
yFind: 0
<5,0,0><10,0,0><30,0,0><100,0,0>
Point: <20,0,0>
zFind: 0
yFind: 0
<5,0,0><10,0,0><20,0,0><30,0,0><100,0,0><2.10934e-023,2.21351e+033,0><0,0,2.21351e+033><0,0,0>
正如您所看到的那样:点在系列中被正确添加(从最小到最大),但这些是最后存在然后消失的奇数额外数字。
谢谢, 西蒙
【问题讨论】:
-
最有可能的是,在向量中插入和删除元素会使所有现有的迭代器失效。但是没有看到代码,很难给出真正的答案。
-
只需推回元素并进行排序。简化您的代码。
标签: c++ random vector std c++14