如何在一定范围内删除数组的元素

时间:2014-11-10 03:22:10

标签: c++ arrays

我有一个大小为10的一维数组。我想从5到8中删除元素。有人可以给我一个如何做的例子吗?这就是我定义数组的方式,但我不知道如何开始。

#include <iostream>
#include <iomanip> 
using namespace std;

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

因此,输出应为1,2,3,4,5,10。 (索引0 =元素1)

由于

4 个答案:

答案 0 :(得分:1)

数组的替代方法是使用vector。在这种情况下,你可以这样做:

#include <vector>

// create vector for integers
std::vector<int> v;

// set values from 1 to 10
for (int i=1; i<=10; i++) 
    v.push_back(i);

// erase from 5 to 8
v.erase (v.begin()+5, v.begin()+9);

顺便说一句,如果你的编译器支持C ++ 11,你可以将vector初始化为:

std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

答案 1 :(得分:0)

你不能真正删除它们,因为C ++的内置数组(如C)是固定大小的。

你可以做的是用它们之后的值覆盖它们,然后(如果你愿意)将数组末尾的四个现在额外的位置归零。 e.g:

// copy latter values over the values we don't want
for (int i=4; i<6; i++) array[i] = array[i+4];

// zero out the no-longer-necessary values at the end, just so they won't appear valid anymore
for (int i=6; i<10; i++) array[i] = 0;

然后在打印数组时,只打印前6个值而不是全部10个,因为你的数组现在(概念上,即使实际上不是)“更短”。

答案 2 :(得分:0)

在上面的例子中,它是一个由10个元素组成的数组[10]。由于数组大小是固定的,因此可能无法从阵列中删除项目。 相反,您可以为相应的元素指定null或其他值。

顺便说一下,我宁愿使用std :: list或std :: vector代替数组。

无论如何,如果你想要摆脱那个元素,你需要将所有那些元素移到左边一个元素的右边:

for (int i = index; i < /* length */; i++)
array[index] = array[index+1];
array[length-1] = 0;

答案 3 :(得分:0)

不确定您的输出到底是什么,所以我只是在这里提供另一种可能的解决方案:

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

    // 1. put all invalid element in the back of the array
    //    "it" points to the first invalid element
    int* it = std::remove_if(std::begin(array), std::end(array), 
    [](int e)
    { 
        return (e >= 5) && (e <= 8);
    });

    // 2. then, mark them as -1 (from "it" to the last element)
    std::transform(it, std::end(array), it,
    [](int e) -> int
    {
        return -1;
    });

    // now the array contains:
    // {1,2,3,4,9,10,-1,-1,-1,-1}