C++实现输入: 数组PK_EDGE_t* arr 和 容器std::vector<PK_EDGE_t>& vec 并且其中数组arr中的元素与容器vec中的元素是无序,将既存在于数组arr中又存在于容器vec的元素从arr和vec删除 然后将数组arr中剩余的元素与容器vec中剩余的元素都添加到容器 std::vector<PK_EDGE_t> vec1中, 并返回vec1,typedef int PK_EDGE_t
时间: 2024-02-19 08:03:50 浏览: 68
好的,这道题跟你之前的问题有些类似,不过这次数组 `arr` 是一个指针,需要注意一下。
首先,我们需要将指针 `arr` 转换为指向数组的指针,方便我们进行后续的操作。可以使用以下代码将指针转换为数组指针:
```c++
PK_EDGE_t* arr_ptr = arr;
```
接下来,我们可以先将数组 `arr` 和容器 `vec` 中的元素进行排序,方便我们进行查找和删除操作。可以使用 `std::sort` 算法来实现:
```c++
std::sort(arr_ptr, arr_ptr + arr_size);
std::sort(vec.begin(), vec.end());
```
其中 `arr_size` 是数组 `arr` 的长度。
接下来,我们可以使用 `std::remove` 算法结合 `erase` 方法来删除既存在于数组 `arr` 中又存在于容器 `vec` 中的元素:
```c++
auto it = std::remove_if(arr_ptr, arr_ptr + arr_size, [&](PK_EDGE_t& x) {
return std::binary_search(vec.begin(), vec.end(), x);
});
arr_size = std::distance(arr_ptr, it);
vec.erase(std::remove_if(vec.begin(), vec.end(), [&](PK_EDGE_t& x) {
return std::binary_search(arr_ptr, arr_ptr + arr_size, x);
}), vec.end());
```
接下来,我们可以将数组 `arr` 和容器 `vec` 中剩余的元素添加到新的容器 `vec1` 中。可以使用 `std::copy` 算法结合 `std::back_inserter` 迭代器来实现:
```c++
std::vector<PK_EDGE_t> vec1;
std::copy(arr_ptr, arr_ptr + arr_size, std::back_inserter(vec1));
std::copy(vec.begin(), vec.end(), std::back_inserter(vec1));
```
最后,我们将 `vec1` 返回即可:
```c++
return vec1;
```
整合起来,完整的实现如下:
```c++
#include <algorithm>
#include <iterator>
#include <vector>
typedef int PK_EDGE_t;
std::vector<PK_EDGE_t> remove_and_merge(PK_EDGE_t* arr, int arr_size, std::vector<PK_EDGE_t>& vec) {
PK_EDGE_t* arr_ptr = arr;
std::sort(arr_ptr, arr_ptr + arr_size);
std::sort(vec.begin(), vec.end());
auto it = std::remove_if(arr_ptr, arr_ptr + arr_size, [&](PK_EDGE_t& x) {
return std::binary_search(vec.begin(), vec.end(), x);
});
arr_size = std::distance(arr_ptr, it);
vec.erase(std::remove_if(vec.begin(), vec.end(), [&](PK_EDGE_t& x) {
return std::binary_search(arr_ptr, arr_ptr + arr_size, x);
}), vec.end());
std::vector<PK_EDGE_t> vec1;
std::copy(arr_ptr, arr_ptr + arr_size, std::back_inserter(vec1));
std::copy(vec.begin(), vec.end(), std::back_inserter(vec1));
return vec1;
}
```
希望这个回答能够帮助到你!
阅读全文