我不知道如何从存储在另一个数组中的索引的元素中清除数组。我需要完成以下由main(...)和函数
组成的C程序void clear_MSBs( unsigned char dest_array[], unsigned char array_indices []).
代码开头:
#define N 8
#define M 5
int main()
{
unsigned char dest_array[N] = {248,249,250,251,252,253,254,255};
unsigned char array_indices[M] = {0,2,3,6,7}; // contains M=5 elements
clear_MSBs(dest_array, array_indices);
// print the modified dest_array[] here
return 0;
}
注意:保证存储在第二个数组中的所有索引都在 允许范围。 我非常感谢你的帮助。
答案 0 :(得分:0)
如果通过清理,你的意思是将元素标记为无效(这可能是你想要的),那么你可以循环遍历indices数组,并使用indices数组的第i个元素作为目标的索引阵列。
示例:
#include <stdio.h>
#define N 8
#define M 5
void clear_MSBs(unsigned char dest_array[], unsigned char array_indices [])
{
for(int i = 0; i < M; ++i)
dest_array[array_indices[i]] = 0;
}
int main()
{
unsigned char dest_array[N] = {248,249,250,251,252,253,254,255};
unsigned char array_indices[M] = {0,2,3,6,7}; // contains M=5 elements
clear_MSBs(dest_array, array_indices);
// print the modified dest_array[] here
for(int i = 0; i < N; ++i)
if(dest_array[i] != 0)
printf("%d ", dest_array[i]);
printf("\n");
return 0;
}
输出:
249 252 253
PS:代码假定无效元素的值为0。
答案 1 :(得分:0)
您只需要使用数组中的下一个值覆盖您要删除的内容,传播该更改,然后记住新结束的位置。
在C ++中,最好使用std :: vector:
std::vector<int> array; // initialize array... // delete element at index 2
array.erase(array.begin() + 2);