从数组中删除零并将数组的大小调整为新的元素数量?

Lin*_*les 1 c++ arrays for-loop

我在C++数组中操作数据时遇到了另一个问题.我现在想通过从中删除所有零来抽取数组.

例如,在我拥有array[4] = {1,2,0,0,4}它之前说它会成为array[3] = {1,2,4}.

我知道我需要使用for循环来遍历存储主数据的数组,并且我很可能需要初始化一个新数组来存储抽取数据,但我不太清楚如何去做.

bet*_*ido 9

您无法调整普通数组的大小,因为它是静态分配的.因此,使用vector标准库(STL)可能更好.以这种方式,您不需要创建新数组.实际上,除非有充分的理由,否则通常使用std::vectorstd::array(在C++ 11中)比普通的C类数组更好.

通过使用vector,您可以执行以下操作:

std::vector<int> v{1,2,0,0,4};
v.erase(
    std::remove(v.begin(), v.end(), 0),
    v.end());
Run Code Online (Sandbox Code Playgroud)

在擦除零元素之后,向量仍然具有容量5,但是(当然v.size()会如预期的那样返回3).如果你可以使用C++ 11那么你可以进一步:

v.shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)

调用shrink_to_fit减少向量的容量以使其适应其中的实际元素数(示例中为3).这可能会节省内存(特别是如果向量中有许多元素).

  • @ 0A0D但不是像OP那样的静态数组.`realloc`适用于以前用`malloc`(或类似)分配的_dynamic_数组. (2认同)