C++在不使用迭代器的前提下,遍历两个元素个数不一样的vector,并且删除两个vector都存在的元素
时间: 2024-02-17 14:01:37 浏览: 91
可以使用下标操作符 `[]` 和 vector 的成员函数 `erase()` 来完成该操作。具体方法如下:
1. 定义两个 vector,假设分别为 `vec1` 和 `vec2`。
2. 定义两个变量 `i` 和 `j`,分别表示遍历 `vec1` 和 `vec2` 的下标。
3. 从前往后遍历 `vec1` 和 `vec2`,当发现两个元素相等时,删除它们,并将 `vec1` 和 `vec2` 的下标分别加一。如果两个元素不相等,将较小的元素所在 vector 的下标加一。
4. 当其中一个 vector 的下标超出其范围时,结束遍历。
具体代码如下:
```c++
vector<int> vec1 = {1, 2, 3, 4};
vector<int> vec2 = {2, 3, 5};
int i = 0, j = 0;
while (i < vec1.size() && j < vec2.size()) {
if (vec1[i] == vec2[j]) {
vec1.erase(vec1.begin() + i);
vec2.erase(vec2.begin() + j);
} else if (vec1[i] < vec2[j]) {
i++;
} else {
j++;
}
}
```
注意,由于删除元素时 vector 的大小会改变,因此不能使用 range-based for 循环或者迭代器进行遍历。
相关问题
c++ 迭代器遍历vector
你可以使用迭代器来遍历并修改 vector 中的元素。以下是一个示例代码:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用迭代器遍历并修改 vector
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
*it = *it * 2;
}
// 打印修改后的 vector
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
上述代码中,我们使用了 `std::vector<int>::iterator` 来声明迭代器,并通过 `vec.begin()` 和 `vec.end()` 获取 vector 的起始和结束位置的迭代器。然后,我们在循环中通过 `*it` 访问当前迭代器指向的元素,并进行修改。最后,我们使用范围-based for 循环打印修改后的 vector。
该示例将输出:2 4 6 8 10,即将 vector 中的每个元素乘以 2。
c++ vector迭代器的遍历
C++中的`std::vector`是一个动态数组,它提供了一种方便的方式来存储元素并支持动态增长。迭代器是一种特殊的指针,用于遍历容器中的元素,如`vector`。迭代器有三种类型:`iterator`, `const_iterator`, 和 `reverse_iterator`,分别对应于非常量访问、只读访问以及反向访问。
以下是使用`vector`迭代器遍历的基本步骤:
1. 创建一个`vector`实例并填充数据。
```cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
```
2. 使用`begin()`函数获取开始迭代的迭代器,使用`end()`获取结束迭代的迭代器(但不包括`end()`本身),两者之间就是容器的所有元素。
```cpp
auto it = vec.begin(); // 非常量迭代器
auto cit = vec.cbegin(); // 只读常量迭代器
auto rit = vec.rbegin(); // 反向迭代器,从后向前遍历
```
3. 使用循环结构(如`for`循环)遍历`vector`。
```cpp
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
```
在这个循环里,`*it`表示当前迭代器指向的元素值。
阅读全文