c++ - 移除一个数组元素并移动剩余的元素

标签 c++ arrays

如何删除数组的元素并将剩余元素向下移动。所以,如果我有一个数组,

array[]={1,2,3,4,5} 

并且想删除 3 并转移其余的,所以我有,

array[]={1,2,4,5}

我将如何用最少的代码来解决这个问题?

最佳答案

您只需要用数组中的下一个值覆盖您要删除的内容,传播该更改,然后记住新的结束在哪里:

int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

// delete 3 (index 2)
for (int i = 2; i < 8; ++i)
    array[i] = array[i + 1]; // copy next element left

现在你的数组是 {1, 2, 4, 5, 6, 7, 8, 9, 9} .不能删除多余的 9因为这是一个静态大小的数组,你只需要忽略它。这可以通过 std::copy 来完成:

std::copy(array + 3, // copy everything starting here
          array + 9, // and ending here, not including it,
          array + 2) // to this destination

在 C++11 中,使用可以使用 std::move (算法重载,而不是实用程序重载)。

更一般地说,使用 std::remove删除匹配值的元素:

// remove *all* 3's, return new ending (remaining elements unspecified)
auto arrayEnd = std::remove(std::begin(array), std::end(array), 3);

更一般地说,有 std::remove_if .

注意使用std::vector<int>在这里可能更合适,因为它是一个“真正的”动态分配的调整大小数组。 (从某种意义上说,要求它的 size() 反射(reflect)了已删除的元素。)

关于c++ - 移除一个数组元素并移动剩余的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/879603/

相关文章:

c++ - 在 C++ 模板实例化期间获取原始结构/类名

c++ - Cuda(warpSize 为负数)

arrays - 计算无限重复字符串的(前缀、重复计数、后缀)切片

Java:序列化初学者问题:-(

c++ - 让 VS 编译器捕捉有符号/无符号的赋值?

c++ - 关于编译程序如何与操作系统交互的问题

C++ header 和未定义引用

javascript - 返回大小为 k 的已排序子序列

javascript - 合并相同ID下的对象并显示在JQuery中的HTML表格中

python - Numpy 统计,创建具有某些统计属性的数组