我正在排序点,我为排序部分编写的代码完美无缺,但我有一个问题。每隔一段时间(随机时间)随机点被添加到向量的末尾,当我尝试pop_back()删除这些最后的元素时(因为我写了一小部分来检查以确保点的数量是同样),我最终在一个无限循环中试图删除这些最后的元素,这些元素不会消失。有什么我应该知道的吗?即使我不试图删除它们,一些点也会随机消失。我试图了解我需要做些什么来防止弹出这些奇怪的点,因为这些点按特定的顺序排序。
我只有三个插入方法,第一个是emplace_back(),下一个是插入,最后一个也是插入方法:
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>
正如你可以看到的那样:点在系列中正确添加(从最小到最大),但这些是最后的奇数额外数字然后消失。
谢谢, 西蒙
答案 0 :(得分:3)
您正在使用capacity
,您应该使用size
。 capacity
返回向量中已分配的元素的数量,这些元素可能大于向量中存储的元素数量(size
)。访问size
末尾之后的元素是未定义的行为
当你将一个元素添加到size() == capacity()
的向量时,将分配新的内存来保存整个向量(从你上面显示的内容开始,你的实现在需要时将容量加倍) 。旧内容将复制到新内存中,并添加新元素。
奇怪的额外数字恰好是坐在为新内容分配的未初始化内存中的内容。
在使用vector
的正常过程中,您很少需要访问capacity
。