从数组中删除奇数

时间:2019-09-04 04:20:42

标签: c++ arrays algorithm

我正在尝试从数组中删除奇数,但是不允许创建新数组来存储新值。

所以,如果我有arr[1,2,3,4,5,6,7,8,9] 那么我需要将其设为arr[2,4,6,8],以便arr[0]将为2而不是1。

如果不创建一个新数组来存储值,然后使用新值将其反馈回原始数组中,我似乎无法删除偶数。

我尝试将arr[i] = 0的值设为奇数,但是我无法删除0并将其替换为下一个偶数。

到目前为止,我有这个:

void removeOdd(int arr[], int& arrSize){
    int i, j = 0;
    int temp;
    int newArrSize;
    for(i = 0, newArrSize = arrSize; i < arrSize; i++){
        if(arr[i] % 2 != 0){
            arr[i] = 0;
        }
    }
    arrSize = newArrSize;
}

2 个答案:

答案 0 :(得分:4)

// Moves all even numbers into the beginning of the array in their original order
int removeOdd(int arr[], int arrSize) {
    int curr = 0; // keep track of current position to insert next even number into
    for (int i = 0; i < arrSize; ++i) {
        if (arr[i] % 2 == 0) {
            arr[curr++] = arr[i];
        }
    }
    return curr;
}

int main() {
    int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
    int newSize = removeOdd(arr, 10);
    for (int i = 0; i < newSize; ++i) {
        std::cout << arr[i] << " ";
    }
}
  

0 2 4 6 8

您可能要使用std::vector

void removeOdd(std::vector<int>& arr) {
    int curr = 0;
    for (int i = 0; i < (int)arr.size(); ++i) {
        if (arr[i] % 2 == 0) {
            arr[curr++] = arr[i];
        }
    }
    arr.resize(curr);
}

int main() {
    std::vector<int> arr = { 0,1,2,3,4,5,6,7,8,9 };
    removeOdd(arr);
    for (int number : arr) {
        std::cout << number << " ";
    }
}

答案 1 :(得分:4)

通常(除非这是某种形式的作业),您应该使用<algorithm>标头中的算法。

std::remove_ifstd::vector的{​​{1}}成员函数一起使用,您将以更少的代码完全完成所需的操作:

erase

Demo