删除数组的元素

时间:2018-09-18 00:33:56

标签: c arrays

我是c语言的新手,我想知道是否有任何内置操作可从数组中删除指定的元素。

例如,如果我想删除数组中的偶数元素

for(.....) //goes through the array one by one
if(nums[i] / 2 = 0)
   nums[i].remove;

我可以代替.remove删除号码。

如果有人知道其他c数组操作的好的文档网站,您可以链接它吗?

2 个答案:

答案 0 :(得分:4)

否,无法从数组中删除元素。

从创建数组开始,数组就具有一定的大小,并且该大小无法更改。

答案 1 :(得分:0)

您需要从要删除的项目开始遍历数组,然后将每个连续的数组项目复制到它之前的项目中。例如将数组项向左移动。

完成此操作后,可以使用realloc()从分配的内存中修剪最后一个数组项。当然,您需要进行数学运算以确定每个数组项的大小,并将realloc()的原始大小传递给减去要“修剪”的数组大小。

其他选项可能是memmovememcopy,但随后您会遇到各种额外的临时缓冲区。

“手动”移动数组项目的示例:

int* items = NULL;
int arraySize = 10;
int itemToRemove = 5;

items = (int*)malloc(sizeof(int) * arraySize);

//Initialize the array with some dummy values.
for (int i = 0; i < arraySize; i++)
{
    items[i] = (i * 100);
}

//Print out the contents of the array - before we remove an item.
printf("Before removing item:\n");
for (int i = 0; i < arraySize; i++)
{
    printf("items[%d]: %d\n", i, items[i]);
}   

//Shift each array item left, starting at the item specified by "itemToRemove".
for (int i = itemToRemove; i < arraySize; i++)
{
    items[i] = items[i + 1];
}

arraySize--; //Be sure to keep track of the new array size.

//Reallocate the array, this will trim the size of the allocated block of memory.
items = (int*)realloc(items, sizeof(int) * arraySize);

//Print out the contents of the array - after we remove an item.
//** NOTICE: The array now only contains 9 items and the 5th one contains the data previously held in the 6th, etc.
printf("After removing item:\n");
for (int i = 0; i < arraySize; i++)
{
    printf("items[%d]: %d\n", i, items[i]);
}

//Be sure to cleanup when done. :)
free(items);