C++在不使用迭代器的前提下,遍历两个元素个数不一样的vector,并且删除两个vector都存在的元素
时间: 2024-02-17 15:01:37 浏览: 29
可以使用下标操作符 `[]` 和 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数组中的 char数组 并取出每一个char数组的值
可以使用如下代码来实现:
```c++
#include <iostream>
#include <vector>
int main() {
std::vector<char*> charVector{"hello", "world", "!"};
for (auto it = charVector.begin(); it != charVector.end(); ++it) {
char* currentChar = *it;
for (int i = 0; currentChar[i] != '\0'; ++i) {
std::cout << currentChar[i] << " ";
}
std::cout << std::endl;
}
return 0;
}
```
在这个例子中,我们创建了一个 `std::vector<char*>`,其中每个元素都是一个 char 指针(即一个 char 数组)。然后我们使用迭代器 `it` 遍历这个 vector,每次取出一个 char 指针,并使用一个 `for` 循环遍历这个 char 数组中的每个 char,直到遇到 `\0` 结束符。最后,我们输出每个 char 的值并换行。
vector<string > names,然后用迭代器遍历names里的每个元素
好的,这个问题很简单。可以使用如下代码遍历 `names` 中的每个元素:
```c++
vector<string> names = {"Alice", "Bob", "Charlie", "David"};
// 使用迭代器遍历 names 中的每个元素
vector<string>::iterator it;
for (it = names.begin(); it != names.end(); ++it) {
cout << *it << endl;
}
```
输出结果为:
```
Alice
Bob
Charlie
David
```
以上代码中,我们首先定义了一个字符串类型的 vector `names`,并且使用大括号语法初始化了一些元素。然后我们使用迭代器 `it` 遍历 `names` 中的每个元素。在 for 循环中,`it` 的初始值为 `names.begin()`,表示指向 `names` 的第一个元素。每次循环结束后,我们将 `it` 向后移动一位,直到 `it` 等于 `names.end()`,表示已经遍历完了 `names` 中的所有元素。
在循环中,我们使用 `*it` 来获取迭代器指向的元素,并将其输出到控制台。