C++ 需要从数组中删除某些值

标签 c++ arrays

我需要从数组中删除所有最小值和最大值,但我不知道该怎么做。

首先我创建一个数组,例如包含 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/

相关文章:

c++ - 为什么重写虚函数时需要显式模板参数?

c++ - map C++ STL所有变体的通用打印功能

arrays - 如何创建不重复的子数组 Swift

c - 忽略 float 组中的字符?

javascript - 搜索数组中的元素 - *不*特定于原始对象

php - 使用 PHP 在 sql 查询中传递字符串数组

arrays - 将带有值数组的字典快速映射到另一个带有值数组的字典?

c++ - 为什么用户定义的字符串文字和整数文字具有不同的行为?

c++ - RAII 类的通用命名约定是什么?

C++队列多线程等待作业完成