这是我在这里的第一个问题,我很高兴能成为社区的一员。
我有动力在这里发布一个带有删除功能的严重问题。我试图删除使用索引和计数关键字我试图从数组中删除元素条。我在纸上画出了不同的场景,但发现没有明显的模式,所以我不得不在这里问。
让我们说你有
char array[] = {'A','B','C','D','E'};
我的函数remove有这个原型
void remove(char arr[], int& size, int element, int count)
如果要编写一个已经声明大小的remove(array, size, 2, 2)
,那么如果打印,则阵列必须打印ABE。该函数必须转到索引2,然后删除两个元素,然后将其他元素移开。
这是我试图实现的功能:
void remove(char arr[], int& size, int element, int count) {
for (int i = element; i < count; i++) {
arr[element] = arr[element + 1];
}
size = size - count; }
我可以编写适合特定测试用例的函数,但我不能将其概括为适用于所有不同的输入。我很确定size = size - count;
是正确的,因为它始终“删除”了最后的适当数量的元素,但我不是百分百肯定。
如何正确实现此功能?我看到其他人提出了类似的问题,但不是一次性删除多个元素。我也没有对矢量的了解,我不认为使用它们会对我的其余程序起作用。
答案 0 :(得分:0)
您只需要进行一些简单的更改,将元素计数元素向前移动到arr[element] = arr[element + count];
的当前元素。同时更改for循环以计算到size - count
。
答案 1 :(得分:0)
您可以按以下方式使用std::rotate
:
void remove(char arr[], int& size, int element, int count) {
std::rotate(arr + element, arr + element + count, arr + size);
size = size - count;
}
编辑:
添加请求的支票:
void remove(char arr[], int& size, int element, int count) {
if(element < size) {
if(count + element > size) count = size - element;
std::rotate(arr + element, arr + element + count, arr + size);
size = size - count;
}
}