我是c语言的新手,我想知道是否有任何内置操作可从数组中删除指定的元素。
例如,如果我想删除数组中的偶数元素
for(.....) //goes through the array one by one
if(nums[i] / 2 = 0)
nums[i].remove;
我可以代替.remove删除号码。
如果有人知道其他c数组操作的好的文档网站,您可以链接它吗?
答案 0 :(得分:4)
否,无法从数组中删除元素。
从创建数组开始,数组就具有一定的大小,并且该大小无法更改。
答案 1 :(得分:0)
您需要从要删除的项目开始遍历数组,然后将每个连续的数组项目复制到它之前的项目中。例如将数组项向左移动。
完成此操作后,可以使用realloc()
从分配的内存中修剪最后一个数组项。当然,您需要进行数学运算以确定每个数组项的大小,并将realloc()
的原始大小传递给减去要“修剪”的数组大小。
其他选项可能是memmove
和memcopy
,但随后您会遇到各种额外的临时缓冲区。
“手动”移动数组项目的示例:
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);