C++实现输入: 数组PK_EDGE_t* arr 和 容器std::vector<PK_EDGE_t>& vec,将既存在于数组arr中又存在于容器vec的元素从arr和vec删除 然后将数组arr中剩余的元素与容器vec中剩余的元素都添加到容器 std::vector<PK_EDGE_t> vec1中, 并返回vec1,其中数组arr中的元素与vec中的元素是无序,typedef int PK_EDGE_t
时间: 2024-02-19 08:03:43 浏览: 59
好的,我来解答你的问题。
首先,我们可以先遍历数组 `arr`,对于每个元素,我们可以遍历 `vec` 来查找是否存在相同的元素。如果存在相同的元素,我们就将该元素从 `arr` 和 `vec` 中删除。可以使用 `std::remove` 算法结合 `erase` 方法来实现:
```c++
for (auto it = arr.begin(); it != arr.end(); ) {
auto found_it = std::find(vec.begin(), vec.end(), *it);
if (found_it != vec.end()) {
vec.erase(found_it);
it = arr.erase(it);
} else {
++it;
}
}
```
接下来,我们可以将 `arr` 和 `vec` 中剩余的元素添加到新的容器 `vec1` 中。可以使用 `std::copy` 算法结合 `std::back_inserter` 迭代器来实现:
```c++
std::vector<PK_EDGE_t> vec1;
std::copy(arr.begin(), arr.end(), std::back_inserter(vec1));
std::copy(vec.begin(), vec.end(), std::back_inserter(vec1));
```
最后,我们将 `vec1` 返回即可:
```c++
return vec1;
```
整合起来,完整的实现如下:
```c++
std::vector<PK_EDGE_t> remove_and_merge(std::vector<PK_EDGE_t>& arr, std::vector<PK_EDGE_t>& vec) {
for (auto it = arr.begin(); it != arr.end(); ) {
auto found_it = std::find(vec.begin(), vec.end(), *it);
if (found_it != vec.end()) {
vec.erase(found_it);
it = arr.erase(it);
} else {
++it;
}
}
std::vector<PK_EDGE_t> vec1;
std::copy(arr.begin(), arr.end(), std::back_inserter(vec1));
std::copy(vec.begin(), vec.end(), std::back_inserter(vec1));
return vec1;
}
```
希望这个回答能够帮助到你!
阅读全文