用c++写代码:顺序表中删除下标为i的元素和删除第i个的函数区别
时间: 2024-09-21 13:05:26 浏览: 36
在 C++ 中,顺序表(如数组或动态数组)通常没有内置的机制可以直接删除指定索引的元素。然而,如果你有一个动态数组或向量(std::vector),你可以使用 `erase` 函数来达到这个目的。
对于简单数组:
```cpp
int arr[5] = {1, 2, 3, 4, 5}; // 假设arr是一个整数数组
// 删除下标为 i 的元素 (数组下标从0开始)
// 这里需要注意数组不会自动调整大小,所以直接删除会使得后续元素移动
void deleteAt(int& arr[], int i) {
if (i < 0 || i >= sizeof(arr)/sizeof(arr[0])) {
std::cout << "Invalid index";
return;
}
for (size_t j = i; j < sizeof(arr)/sizeof(arr[0]) - 1; ++j) {
arr[j] = arr[j + 1];
}
arr[sizeof(arr)/sizeof(arr[0]) - 1] = nullptr; // 或者设置为特殊值表示已删除
}
// 删除第 i 个元素
// 如果需要删除第 i 个元素,可能需要先找到它的实际位置,然后使用类似上述的方法删除
// 对于动态查找元素的位置,这通常不是数组的高效操作,但在其他数据结构(如链表)中可行
```
对于 `std::vector`:
```cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
// 删除下标为 i 的元素
vec.erase(vec.begin() + i); // 直接通过迭代器删除
// 删除第 i 个元素
auto it = vec.begin();
for (int i = 0; it != vec.end(); ++it, ++i) {
if (*it == targetValue) {
vec.erase(it);
break;
}
}
```
阅读全文