c++ for循环同时遍历两个list
时间: 2023-09-18 10:06:59 浏览: 407
在C++中,可以使用`for`循环同时遍历两个`list`。假设要同时遍历`list1`和`list2`,可以按照以下方式进行:
```cpp
#include <iostream>
#include <list>
int main() {
std::list<int> list1 = {1, 2, 3, 4, 5};
std::list<int> list2 = {6, 7, 8, 9, 10};
// 获取两个list中较小的size
size_t size = std::min(list1.size(), list2.size());
// 使用迭代器进行遍历
auto it1 = list1.begin();
auto it2 = list2.begin();
for (size_t i = 0; i < size; ++i) {
// 输出对应位置的元素
std::cout << *it1 << " " << *it2 << std::endl;
// 迭代器向后移动
++it1;
++it2;
}
return 0;
}
```
上述代码中,通过使用两个迭代器`it1`和`it2`,在`for`循环中同时遍历了`list1`和`list2`。注意,在遍历过程中需要确保两个`list`的大小相同或者至少有相同数量的元素,否则可能会导致访问越界。
相关问题
写出c++中list容器遍历的方式
在C语言中没有标准的list容器,但可以使用链表来实现类似的功能。遍历链表的方式通常有两种:
1. 使用while循环遍历链表中的每个节点,直到遍历完整个链表。
```
struct ListNode {
int val;
struct ListNode *next;
};
void traverseList(struct ListNode* head) {
struct ListNode* current = head;
while (current != NULL) {
printf("%d ", current->val);
current = current->next;
}
}
```
2. 使用for循环遍历链表中的每个节点,直到遍历完整个链表。
```
struct ListNode {
int val;
struct ListNode *next;
};
void traverseList(struct ListNode* head) {
for (struct ListNode* current = head; current != NULL; current = current->next) {
printf("%d ", current->val);
}
}
```
C++ 链表遍历
C++ 中的链表遍历可以使用循环或递归两种方式实现。
循环遍历:
```c++
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
void traverseList(ListNode* head) {
ListNode* cur = head;
while (cur != NULL) {
// 处理当前节点
cout << cur->val << " ";
// 移动到下一个节点
cur = cur->next;
}
}
```
递归遍历:
```c++
void traverseList(ListNode* head) {
if (head == NULL) {
return;
}
// 处理当前节点
cout << head->val << " ";
// 遍历下一个节点
traverseList(head->next);
}
```
以上两种方式都可以实现链表的遍历,循环方式通常更加高效,而递归方式则更加简洁易懂。
阅读全文