C++ 删除数组中等于任何给定目标的元素

C++ 删除数组中等于任何给定目标的元素,c++,algorithm,C++,Algorithm,全部问题是: 给定一个数组和一个值,删除该值的所有实例并返回新的长度。元素的顺序可以更改。你在新的长度之外留下什么并不重要 这是我的密码 int removeElement(int A[], int n, int elem) { vector<int> B; for (int i=0; i<n; i++) { if (A[i]!=elem) { B.push_back(A[i]); } }

全部问题是:

给定一个数组和一个值,删除该值的所有实例并返回新的长度。元素的顺序可以更改。你在新的长度之外留下什么并不重要

这是我的密码

int removeElement(int A[], int n, int elem) {   
    vector<int> B;
    for (int i=0; i<n; i++) {
        if (A[i]!=elem) {
            B.push_back(A[i]);
        }
    }
    return B.size();
}

我想知道为什么,我认为这应该是正确的,有人能给我一些足够的理由让我理解吗?

请求将该值的所有实例都删除到位,也就是说,修改A指向的数组的内容。您需要返回一个新的长度,以便数组
[A,A+新长度)
包含所有不等于
elem

的元素。您误解了他们希望您如何解决问题。他们有一段代码,如下所示:

int main() {
    int array[2] = {4, 5};
    int length = 2;

    // Call the user's function
    int new_length = removeElement(array, length, 4);

    // Validate their output.
    assert(new_length == 1);
    assert(array[0] == 5);
}

您的代码在第二次断言中失败。

“我们应该输出”和“但预期”的意思是相同的。我无法分辨程序输出的是什么,法官期望的是什么。但无论哪种情况,正确答案都是[5],因为您应该从数组中删除4的所有实例。您不从数组中删除任何内容,只需将不相等的元素移动到向量中,然后扔掉该向量。这是一个使用
std::remove
vector::erase
@cdhowie的单行程序,鉴于您对问题的描述,请查看您的问题是为了获得帮助。@PaulMcKenzie:因为参数是一个数组,所以实际上它只是对
std::remove
@BillLynch的一个调用,因为元素的顺序可以更改,所以它比
std::remove
更有效。
int main() {
    int array[2] = {4, 5};
    int length = 2;

    // Call the user's function
    int new_length = removeElement(array, length, 4);

    // Validate their output.
    assert(new_length == 1);
    assert(array[0] == 5);
}