我有一个动态的整数数组:
int *array = malloc(1000 * sizeof(int));
for (int i = 0; i < 1000; ++i) {
array[i] = i;
}
如何在不创建新阵列和复制元素的情况下有效删除555-565之间的元素?
答案 0 :(得分:2)
这可以算作删除吗?
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main(void) {
int* array = malloc(sizeof(int)*110);
for(int i=0; i<100; i++)
array[i]=i;
for (int r=56; r<100; r++)
array[r]=array[r+6];
//memset(array+94, 0, 5);
memset(array+94, 0, 5 * sizeof(int));
}
答案 1 :(得分:2)
您可以通过以下方式执行此操作
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
size_t N = 1000;
int *a = malloc( N * sizeof( int ) );
for ( size_t i = 0; i < N; ++i ) a[i] = i;
size_t n1 = 555, n2 = 565;
for ( size_t i = n1; i < n2 + 1; i++ ) printf( "%d ", a[i] );
printf( "\n" );
memmove( a + n1, a + n2, ( N - n2 ) * sizeof( int ) );
int *tmp = realloc( a, ( N - n2 + n1 ) * sizeof( int ) );
if ( tmp ) a = tmp;
for ( size_t i = n1; i < n2 + 1; i++ ) printf( "%d ", a[i] );
printf( "\n" );
free( a );
}
程序输出
555 556 557 558 559 560 561 562 563 564 565
565 566 567 568 569 570 571 572 573 574 565
或者您可以通过支持数组中当前数量的实际元素来避免数组重新分配。