首页 > 编程语言 >C++学习笔记——范围基于 for 循环和for_each循环的区别

C++学习笔记——范围基于 for 循环和for_each循环的区别

时间:2024-08-27 16:38:42浏览次数:11  
标签:std num int C++ 循环 numbers each include

范围基于for循环是C++11中引入的,简化了遍历数组或容器的代码

点击查看代码
#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};

    // 使用范围基于 for 循环遍历
    for (int num : numbers) {
        std::cout << num << " ";
    }

    return 0;
}

点击查看代码
#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};

    // 修改元素的值
    for (int& num : numbers) {
        num *= 2;
    }

    for (const int& num : numbers) {
        std::cout << num << " ";
    }

    return 0;
}

特性

简洁易读:范围基于 for 循环的语法非常简洁,容易理解。

自动推断类型:可以使用 auto 关键字自动推断元素类型。

只读与修改:可以通过值、引用、常量引用等方式访问容器元素。如果需要修改元素,可以使用引用。

缺点:
不能控制遍历顺序,只能顺序遍历。

不能提前终止循环(除非通过 break)。

std::for_each 算法

点击查看代码
#include <iostream>
#include <vector>
#include <algorithm>

void printElement(int num) {
    std::cout << num << " ";
}

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};

    // 使用 std::for_each 进行遍历
    std::for_each(numbers.begin(), numbers.end(), printElement);

    return 0;
}

点击查看代码
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};

    // 使用 lambda 表达式修改元素的值
    std::for_each(numbers.begin(), numbers.end(), [](int& num) { num *= 2; });

    std::for_each(numbers.begin(), numbers.end(), [](int num) {
        std::cout << num << " ";
    });

    return 0;
}

标签:std,num,int,C++,循环,numbers,each,include
From: https://www.cnblogs.com/kitanoki/p/18382994

相关文章

  • C++学习随笔——关联容器的迭代器失效问题
    常见关联容器的迭代器失效规则std::map和std::set:插入元素:插入新元素不会使任何已有的迭代器失效。你可以在插入新元素后继续使用所有现有的迭代器。删除元素:删除某个元素会导致指向该元素的迭代器失效。除此之外,所有指向其他元素的迭代器仍然有效。如果在遍历过程中删除......
  • 从零开始学习C++之递归
    递归注:此算法与函数有关,如不了解请移步。在wikipedia中,递归的解释是这样的:在C++中,递归就是指在函数中调用函数本身;递归的作用类似于分治,将一个大问题分解为很多小问题进行求解。但是递归的时间复杂度极高,因为要解决很多小问题,所以时间复杂度高达\(O(2^n)\)。使用递......
  • C++/Qt 多媒体(续二)
    一、前言        前边讲述到了Qt的两项独特的模块编程支持的另一项内容——多媒体编程,上篇文章具体讲述的包括一个QMediaPlayer类的示例代码和一个QSoundEffect类的讲解,而本章将会提供一篇示例代码——《基于QMediaRecorder类的音频录制》。    对于上篇内......
  • C++面试基础系列-this指针
    系列文章目录文章目录系列文章目录C++面试基础系列-this指针Overview1.this指针1.1.特性1.2.用法1.3.注意事项2.使用'this'指针的多态类的示例3.在C++中,指针和对象本身有什么区别?关于作者C++面试基础系列-this指针Overview1.this指针在C++中,this指针是一......
  • c/c++代码流程图生成
    以下介绍2款皆免费1.cxx2flow【github项目】c/c++函数解析为dot然后通过Graphviz渲染项目有附带gui程序可直接生成流程图,但是显示效果缩放不太行,建议解析生成dot后喂给其他基于Graphviz的渲染服务,使用过vscode上面的graphviz-interactive-preview,效果还行,也有在线网页渲染......
  • 【编程规范具体案例(基于Qt、微软、谷歌和AUTOSAR C++14 参考)】 C++ 编码规范 之并发篇
    目录标题并发目录12.并发编程规范12.1线程创建与管理规则12.1.1\[必须]明确定义线程的生命周期管理策略12.1.2\[必须]为关键线程设置明确的标识符12.1.3\[必须]在多线程环境中安全地处理异常12.2线程同步规则12.2.1\[必须]使用线程安......
  • C++与C语言中基础数据类型详解
    目录引言基础数据类型分类实际编程中的应用建议结论引言在C++与C语言的编程世界中,理解并正确使用基础数据类型是每个程序员的必备技能。不同的数据类型在内存中的占用和表示方式直接影响到程序的性能和行为。本文将详细介绍C++与C语言中常见的基础数据类型,探讨它们......
  • C++ lambda
    文章目录基本语法捕捉列表函数对象与lambda表达式C++的lambda表达式是C++11及以后版本中引入的一种强大的特性,它提供了一种简洁的方式来定义匿名函数对象。Lambda表达式能够捕获其所在作用域中的变量(以值或引用的方式),并允许你在需要函数对象的地方(比如算法库中的函数......
  • C++常见内存错误及其对策
    常见内存错误及其对策目录常见内存错误及其对策内存分配未成功,却使用了它内存分配成功但未初始化内存操作越界内存泄漏释放内存后继续使用规则总结图表示C++学习资料在软件开发过程中,内存管理是至关重要的一环。内存错误不仅会导致程序崩溃,还可能引发安全问题。本文......
  • c++教程之三大结构
    C++顺序结构教程在编程的世界里,顺序结构是构建所有程序的基础。无论是简单的脚本还是复杂的应用程序,它们都是由一系列按照特定顺序执行的指令组成的。C++,作为一种高效、灵活的编程语言,同样遵循这一原则。本教程将深入介绍C++中的顺序结构,包括变量与数据类型、运算符与表达式、......