我需要从数组中删除所有最小值和最大值,但我不知道该怎么做。
首先我创建一个数组,例如包含 5 个数字。然后我输入数字,比如 1、2、3、4、5。然后我找到最小值和最大值,即 1 和 5,这很简单。然后我需要删除它们,这就是我卡住的地方。
这是代码:(循环倒数第二个是相关部分)
int main()
{
int i;
int n;
int min=999999;
int max=-999999;
cout<<"Enter how many elements there will be in the array"<<endl;
cin>>n;
int array[n];
for(i=0;i<n;i++)
{
cout<<"Enter element "<<i+1<<endl;
cin>>array[i];
}
for(i=0;i<n;i++)
{
if(array[i]<min)
{
min=array[i];
}
if(array[i]>max)
{
max=array[i];
}
}
for(i=0;i<n-1;i++)
{
if(array[i]==min||array[i]==max)
{
for(i=0;i<n-1;i++)
{
array[i]=array[i+1];
}
array[n-1]=0;
n--;
}
}
for(i=0;i<n;i++)
{
cout<<"Array after min and max values deleted: "<<array[i]<<endl;
}
return 0;
}
我在想的是,它应该使用 for 循环遍历数组,如果找到最小值或最大值,则应该将其删除,但出于某种原因,它不能那样工作。它只删除第一个值,仅此而已。任何帮助将不胜感激。
最佳答案
无法从数组中删除值。数组在其整个生命周期中具有固定数量的元素。
您可以做的是围绕元素移动,以便重要的值位于开头。例如,您的数组可以包含 [2, 3, 4, x, y],其中 x 和 y 是您不关心的一些值。
有标准算法可以做到这一点:std::remove
, 和 std::remove_if
.示例:
auto is_min_or_max = [=](int val) {
return val == min
|| val == max;
};
std::remove_if(array, array + n, is_min_or_max);
此外,还有用于查找数组中的最小值和最大值的标准算法:std::minmax_element
.
附言array[n]
是错误的,因为 n
不是编译时间常量。您需要动态分配数组以获得运行时大小。我建议使用 std::vector<int>
.使用 vector,还可以删除已删除的元素(内存未释放,但 std::vector::size
报告减小的大小)。
关于C++ 需要从数组中删除某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58882158/