我已经制作了这个简单的代码来删除和排序向量的元素。我已经多次检查了,当我单独运行它们时,排序和删除算法都是正确的,但是有一个问题,当我删除一个元素然后按降序对矢量进行排序时,程序会将一个值放在' 0'索引,但如果我按升序排序,则工作正常。 任何帮助,将不胜感激。谢谢。 以下是程序1
的示例运行图像#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
bool flag = 1;
int size = 5,delind;
vector <int> v1;
v1.resize(size);
for(int i = 0; i<size; i++)
{
cout<<"\nenter a no. ";
cin>>v1[i];
}
// index of the element to be deleted
cout << "\nEnter the index of no. to delete: ";
cin >> delind;
for(int i = delind; i < size; i++)
{
v1[i] = v1[i+1];
}
--size;
v1.erase(v1.begin()+size);
for(int i =0; i < size; i++)
{
cout << endl << endl << v1[i];
}
cout << "\n sorting";
// sorting
while (flag == 1)
{
flag = 0;
for(int i = 0; i < size; i++)
{
if(v1[i] < v1[i+1]) // works fine with if(v1[i]>v1[i+1])
{
flag = 1;
swap(v1[i],v1[i+1]);
}
}
}
for(int i = 0; i < size; i++)
{
cout << endl << endl << v1[i];
}
return 0;
}
答案 0 :(得分:1)
您的排序部分出现了一个错误。在以下几行中:
for(int i = 0;i<size;i++)
{
if(v1[i]<v1[i+1]) // works fine with if(v1[i]>v1[i+1])
{
flag = 1;
swap(v1[i],v1[i+1]);
}
}
此时size
为4,v1.size()
也为4.在for循环中,i
像往常一样从0变为3。但是您正在使用v1[i+1]
,因此您的循环将尝试访问v1[4]
,这超出了界限并为您提供了所见的垃圾值。
要修复它,只需修复你的循环边界:
for (int i = 0; i < size - 1; i++)