从数组中移除元素,然后将其他元素移到上面
Remove element from array then shift other elements over
这是我在这里的第一个问题,我很高兴能成为社区的一员。
我在这里发帖的动机是遇到了一个删除功能的严重问题。我试图使用索引和计数关键字来删除我试图从数组中删除元素条。我在纸上画出了不同的场景,但没有发现明显的模式,所以我不得不在这里提问。
假设你有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;
是正确的,因为它总是从末尾"删除"适当数量的元素,但我不能100%确定。
如何正确实现此功能?我看到其他人也提出了类似的问题,但不是为了一次删除潜在的多个元素。我对矢量也一无所知,我不认为在我的程序的其余部分使用它们。
您可以按以下方式使用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;
}
}
您只需要几个简单的更改,就可以使用arr[element] = arr[element + count];
将元素计数元素向前移动到当前元素。同时将for循环更改为计数到size - count
。
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 将 Vector<String > 元素复制到其他 Vector<String>* (1 作为
- 将向量C++中的每个其他元素累加
- 如果类包含基类类型的成员作为第一个元素,后跟其他成员,编译器是否可以优化空基?
- 我有一系列阵列.可以从一个数组中阅读一些元素和另一个数组中的其他元素
- 在一个类中向向量添加元素不适用于其他类
- 当从其他方法返回 vector 时,C++无法访问矢量元素
- 我无法将二维数组的两个元素的差异分配给C++中其他数组的元素?
- 将多种数据类型写入文件时的其他行和额外的数组元素
- 如何在unordered_map中插入 3 个元素或其他奇数个元素
- 检查unordered_set是否包含其他unordered_set中的所有元素 - C++
- C++11 在列表到映射(或其他容器)之间移动元素
- C++:从动态结构数组中删除元素并移动其他元素
- 为什么 size() 在与其他堆栈交换元素后提供错误的堆栈大小?
- 使用对其他枚举值的操作定义枚举元素值
- C 链接列表仅输出其他每个元素
- 从两个列之一返回值,或跳过数组中的所有其他元素
- 检查两个数组中的相似元素,为某些测试返回正确的值,为其他测试返回不正确的值
- 子级访问同一父级的其他子级的元素