两个vector查找重复元素
时间: 2023-07-26 07:16:44 浏览: 131
可以使用两层循环遍历两个 vector,然后比较每个元素是否相同。如果相同,则说明存在重复元素。
以下是一个示例代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2 = {3, 5, 7, 9};
for (int i = 0; i < v1.size(); i++) {
for (int j = 0; j < v2.size(); j++) {
if (v1[i] == v2[j]) {
cout << "Found duplicate element: " << v1[i] << endl;
}
}
}
return 0;
}
```
在上面的示例中,我们分别定义了两个 vector `v1` 和 `v2`,然后使用两层循环遍历这两个 vector,比较每个元素是否相同,如果相同则输出该元素。
相关问题
C++实现输入两个不同元素个数的vector1和vector2,找出两个容器中相同的元素,并且把相同元素从vector1中删除
可以按照以下思路实现:
1. 遍历 vector1,对于每一个元素,查看其是否在 vector2 中出现过。
2. 如果该元素也在 vector2 中出现过,则将该元素从 vector1 中删除。
3. 如果该元素没有在 vector2 中出现过,则继续遍历 vector1 中的下一个元素。
以下是代码实现:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
void remove_same_element(std::vector<int>& vec1, const std::vector<int>& vec2) {
for (auto it = vec1.begin(); it != vec1.end();) {
auto pos = std::find(vec2.begin(), vec2.end(), *it);
if (pos != vec2.end()) {
it = vec1.erase(it);
} else {
++it;
}
}
}
int main() {
std::vector<int> vec1 = {1, 2, 3, 4, 5};
std::vector<int> vec2 = {4, 5, 6, 7, 8};
std::cout << "Before: vec1 = ";
for (auto& i : vec1) {
std::cout << i << " ";
}
std::cout << ", vec2 = ";
for (auto& i : vec2) {
std::cout << i << " ";
}
std::cout << std::endl;
remove_same_element(vec1, vec2);
std::cout << "After: vec1 = ";
for (auto& i : vec1) {
std::cout << i << " ";
}
std::cout << ", vec2 = ";
for (auto& i : vec2) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
注意:在删除 vector1 中的元素时,需要使用 erase() 函数,并将返回值赋值给迭代器,以保证迭代器指向下一个元素。同时,因为 vec2 不需要修改,所以将其声明为 const 引用。
C++实现删除vector中相同的元素,并返回相同元素的位置索引
以下是实现删除`vector`中相同元素并返回相同元素位置索引的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
std::vector<int> findDuplicateIndices(std::vector<int>& vec) {
std::vector<int> indices;
for (auto it1 = vec.begin(); it1 != vec.end(); ++it1) {
for (auto it2 = std::next(it1); it2 != vec.end(); ++it2) {
if (*it1 == *it2) {
indices.push_back(std::distance(vec.begin(), it2));
vec.erase(it2);
it2--;
}
}
}
return indices;
}
int main() {
std::vector<int> vec = {1, 2, 3, 2, 4, 3, 5};
std::vector<int> indices = findDuplicateIndices(vec);
std::cout << "Duplicate indices: ";
for (auto index : indices) {
std::cout << index << " ";
}
std::cout << std::endl;
std::cout << "Distinct elements: ";
for (auto elem : vec) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
```
该函数`findDuplicateIndices`接受一个`vector`参数,并返回一个`vector`,其中包含重复元素的位置索引。该函数使用两重循环遍历`vector`中的每个元素,并在内循环中查找相同的元素。如果找到相同的元素,则将其位置索引添加到分配给`indices`的`vector`中,并使用`erase`函数删除`vector`中的一个副本,以确保不会重复计算。
在主函数中,我们可以使用`findDuplicateIndices`函数查找重复元素的位置索引,并打印出重复位置索引和剩余的不同元素。