首页 > 解决方案 > C ++从数组中删除空元素

问题描述

如果满足条件,我只想将 a[i] 添加到结果数组中,但是此方法会在添加到 result[i] 时导致数组中的元素为空。有一个更好的方法吗?

for(int i=0; i<N; i++)
{
    if(a[i]>=lower && a[i]<=upper)
    {
        count++;
        result[i]=a[i];
    }
}

标签: c++arrays

解决方案


你可以先让result空,并且只有push_back a[i]在满足条件时:

std::vector<...> result;

for (int i = 0; i < N; i++)
{
    if (a[i] >= lower && a[i] <= upper)
    {
        result.push_back(a[i]);
    }
}

count你可以省略,因为它会result.size()告诉你有多少元素满足条件。


要获得更现代的解决方案,就像一些程序员老兄建议的那样,您可以std::copy_if结合使用std::back_inserter来实现相同的目标:

std::vector<...> result;

std::copy_if(a.begin(), a.end(), std::back_inserter(result),
    [&](auto n) {
        return n >= lower && n <= upper;
    });

推荐阅读