继续收到此错误“矢量下标超出范围”。我确定它是因为我的代码的这一部分。任何人都可以帮我看看我做错了什么
bool set::remove(SET_ELEMENT_TYPE removalCandidate)
{
int subscript = positionOf(removalCandidate);
while( (subscript < my_size) && (my_element[subscript] != removalCandidate))
{
subscript++;
}
if(subscript = -1)
{
if(subscript == my_size)
return false;
else {
while (subscript < my_size)
{
my_element[subscript] = my_element[subscript + 1];
subscript++;
}
my_size--;
return true;
}
return false;
}
return 0;
}
答案 0 :(得分:6)
您在此-1
条件中将subscript
分配给if
:
if(subscript = -1)
此代码的用意不明确。
您将在此循环中访问超出矢量边界的位置,subscript
在-1,
时的第一次访问时,以及subscript
相等时的循环结束时访问到my_size - 1
。
while (subscript < my_size)
{
my_element[subscript] = my_element[subscript + 1];
subscript++;
}
这是因为my_element[-1]
是第一个元素的后面一个,而my_element[my_size]
正在读取一个超过向量的最后一个元素。你可以改变你的测试:
while (subscript + 1 < my_size)
{ //...
这修复了while
循环结束时的界限,但您应该修复if
条件以不分配给subscript
。
答案 1 :(得分:0)
while( (subscript < my_size) && (my_element[subscript] != removalCandidate) )
除非您尝试在Vector中使用唯一值,否则您不需要&amp;&amp;与条件的第二部分。您也没有删除'removalCandidate',因为您在转到IF语句之前关闭了循环。
@ 0x499602D2是正确的,您将使用-1的下标检查Vector。所以你总是会超出范围。
最后,while循环结束时的下标将等于my_size,因此在引用时
my_element[subscript]
如果Vector的大小为10但Vector的引用从零开始,那么每次都会超出范围。所以你应该将Vector从0引用到(my_size-1)。