我有一个大小为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)
由于
答案 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}