容器常用的遍历方式

在C++中,遍历容器(如std::vectorstd::liststd::map等)的常用方式有多种。以下是一些主要的遍历方式:

1. 使用for循环和索引(下标遍历)

这是最基本的遍历方式,通过索引(或下标)来访问容器中的每个元素。适用于支持随机访问的容器,如std::vectorstd::deque等。

std::vector<int> v = {1, 2, 3, 4, 5};  
for (int i = 0; i < v.size(); ++i) {  
    std::cout << v[i] << " ";  
}

2. 使用迭代器

迭代器提供了一种通用的方法来访问容器中的元素,它允许我们以统一的方式遍历不同类型的容器。迭代器遍历适用于所有STL容器。


std::vector<int> v = {1, 2, 3, 4, 5};  
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {  
    std::cout << *it << " ";  
}  
// 或者使用auto关键字简化迭代器类型  
for (auto it = v.begin(); it != v.end(); ++it) {  
    std::cout << *it << " ";  
}

3. 使用C++11引入的范围for循环(基于范围的for循环)

范围for循环提供了一种更简洁的遍历容器的方式,它自动处理迭代器的细节。适用于所有支持迭代器的容器。

std::vector<int> v = {1, 2, 3, 4, 5};  
for (const auto& elem : v) { // 使用const auto&避免不必要的拷贝,并且如果不需要修改元素,推荐使用const  
    std::cout << elem << " ";  
}

4. 使用STL算法for_each

std::for_each是STL中的一个算法,它可以对容器中的每个元素执行给定的函数。它需要包含头文件<algorithm>

 
#include <algorithm>  
#include <vector>  
#include <iostream>  
  
void print(int n) {  
    std::cout << n << " ";  
}  
  
int main() {  
    std::vector<int> v = {1, 2, 3, 4, 5};  
    std::for_each(v.begin(), v.end(), print);  
    // 或者使用Lambda表达式  
    std::for_each(v.begin(), v.end(), [](int n) { std::cout << n << " "; });  
    return 0;  
}

5. 使用C++17引入的结构化绑定(与遍历结合较少,但可用于解包元素)

虽然结构化绑定主要用于解包结构体、元组或pair等复合类型的元素,但在与遍历结合使用时,它主要用于解包容器中的元素对或更复杂的结构,而不是直接用于遍历容器。

总结

  • 下标遍历:适用于支持随机访问的容器,如std::vector
  • 迭代器遍历:适用于所有STL容器,是最通用和灵活的遍历方式。
  • 范围for循环:C++11引入,提供了一种更简洁的遍历方式,适用于所有支持迭代器的容器。
  • STL算法for_each:对容器中的每个元素执行给定的函数,适用于需要执行特定操作的遍历场景。

在实际编程中,可以根据具体需求和容器类型选择最合适的遍历方式。

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值