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