C++实现输入: 数组PK_EDGE_t* arr 和 容器std::vector<PK_EDGE_t>& vec,将既存在于数组arr中又存在于容器vec的元素从arr和vec删除 然后将数组arr中剩余元素与容器vec中剩余元素都添加到容器 std::vector<PK_EDGE_t> vec1中, 并返回vec1,其中typedef int PK_EDGE_t
时间: 2024-02-19 20:03:32 浏览: 63
可以尝试下面的代码实现:
```c++
#include <vector>
typedef int PK_EDGE_t;
std::vector<PK_EDGE_t> find_common_elements(PK_EDGE_t* arr, int arr_size, std::vector<PK_EDGE_t>& vec) {
std::vector<PK_EDGE_t> vec1;
int i = 0, j = 0;
while (i < arr_size && j < vec.size()) {
if (arr[i] == vec[j]) {
++i;
++j;
} else if (arr[i] < vec[j]) {
vec1.push_back(arr[i]);
++i;
} else {
vec1.push_back(vec[j]);
++j;
}
}
// 添加 arr 和 vec 中的剩余元素到 vec1 中
for (; i < arr_size; ++i) {
vec1.push_back(arr[i]);
}
for (; j < vec.size(); ++j) {
vec1.push_back(vec[j]);
}
// 删除 arr 和 vec 中的公共元素
i = 0;
while (i < arr_size) {
bool found = false;
for (j = 0; j < vec.size(); ++j) {
if (arr[i] == vec[j]) {
found = true;
break;
}
}
if (found) {
--arr_size;
for (int k = i; k < arr_size; ++k) {
arr[k] = arr[k + 1];
}
vec.erase(vec.begin() + j);
} else {
++i;
}
}
return vec1;
}
```
该函数先通过双指针法找到数组 `arr` 和容器 `vec` 中的公共元素,并将它们添加到临时向量 `vec1` 中。然后,它遍历数组和容器,将不在公共元素中的元素添加到 `vec1` 中。最后,它通过遍历数组和容器的方法删除公共元素,并返回 `vec1`。请注意,该函数假设数组 `arr` 已经按照从小到大的顺序排列,容器 `vec` 也按照从小到大的顺序排列。如果这些顺序不满足,可以在函数最开始时先对它们进行排序。
阅读全文