标准模板库STL迭代技巧

发布时间:2024-09-10 14:00:09 作者:小樊
来源:亿速云 阅读:80

C++ 的标准模板库 (STL) 提供了一些高效且通用的迭代器,可以方便地遍历容器

  1. 使用 auto 关键字简化迭代器类型: 使用 C++11 引入的 auto 关键字,可以自动推导迭代器的类型。这样可以简化代码并减少出错的可能性。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    
  2. 使用范围基于的 for 循环(C++11): 如果你只需要访问元素而不需要修改它们,可以使用范围基于的 for 循环。这种方法更简洁,也更安全。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (const auto &element : vec) {
        std::cout<< element << " ";
    }
    
  3. 使用 std::for_each 和 lambda 表达式(C++11): 如果你想对容器中的每个元素执行相同的操作,可以使用 std::for_each 算法和 lambda 表达式。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    std::for_each(vec.begin(), vec.end(), [](int element) {
        std::cout<< element << " ";
    });
    
  4. 使用反向迭代器: 如果你需要从容器的末尾开始遍历,可以使用反向迭代器。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (auto it = vec.rbegin(); it != vec.rend(); ++it) {
        std::cout << *it << " ";
    }
    
  5. 使用 std::next 和 std::prev: 如果你需要在迭代过程中跳过一些元素,可以使用 std::nextstd::prev 函数。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = vec.begin();
    std::cout << *it << " "; // 输出第一个元素
    it = std::next(it, 2); // 跳过两个元素
    std::cout << *it << " "; // 输出第三个元素
    
  6. 使用 std::distance 计算距离: 如果你需要知道两个迭代器之间的距离,可以使用 std::distance 函数。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it1 = vec.begin();
    auto it2 = std::next(it1, 3);
    std::cout << "Distance: "<< std::distance(it1, it2)<< std::endl; // 输出 3
    
  7. 使用 std::advance 移动迭代器: 如果你需要将迭代器向前或向后移动指定的步数,可以使用 std::advance 函数。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = vec.begin();
    std::advance(it, 2); // 将迭代器向前移动两个位置
    std::cout << *it<< std::endl; // 输出第三个元素
    
  8. 使用 std::find 查找元素: 如果你需要在容器中查找特定的元素,可以使用 std::find 算法。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = std::find(vec.begin(), vec.end(), 3);
    if (it != vec.end()) {
        std::cout << "Found: " << *it<< std::endl;
    } else {
        std::cout << "Not found"<< std::endl;
    }
    
  9. 使用 std::count 和 std::count_if 计算元素数量: 如果你需要计算容器中特定元素的数量,可以使用 std::countstd::count_if 算法。

    std::vector<int> vec = {1, 2, 3, 2, 5};
    int count = std::count(vec.begin(), vec.end(), 2);
    std::cout << "Count of 2: "<< count<< std::endl; // 输出 2
    
  10. 使用 std::lower_bound 和 std::upper_bound 进行二分查找: 如果你正在处理已排序的容器,可以使用 std::lower_boundstd::upper_bound 进行二分查找。

    std::vector<int> vec = {1, 2, 2, 3, 5};
    vec.sort();
    auto lower_it = std::lower_bound(vec.begin(), vec.end(), 2);
    auto upper_it = std::upper_bound(vec.begin(), vec.end(), 2);
    std::cout << "Lower bound: " << *lower_it<< std::endl; // 输出 2
    std::cout << "Upper bound: " << *upper_it<< std::endl; // 输出 3
    

这些技巧可以帮助你更有效地使用 STL 迭代器。请注意,这里的示例主要使用了 std::vector,但这些技巧也适用于其他 STL 容器,如 std::liststd::set 等。

推荐阅读:
  1. C++怎么拼接相临的奇偶行文本内容
  2. C++怎么把某个目录下所有txt中第三行第四个数字相加

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:C++图形库函数应用实例

下一篇:字符串处理库函数特性

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》