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);
}