首页 > 编程语言 >C++中for_each用法学习

C++中for_each用法学习

时间:2024-01-14 13:22:06浏览次数:31  
标签:std cout 元素 C++ 用法 vec each include

转自:chatgpt

1.介绍

std::for_each 是 C++ 标准库中的一个算法,用于对指定范围内的元素执行指定的操作。它的一般形式如下:

template <class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f);
  • firstlast 是表示范围的迭代器,[first, last) 是待处理的元素范围。
  • f 是一个一元函数对象(或者函数指针),该函数对象接受迭代器范围内的每个元素并进行处理。

std::for_each 遍历指定范围内的每个元素,并对每个元素调用给定的一元函数。它不会改变元素的值,而是通过传递值给函数对象来实现对元素的操作。例子:

#include <algorithm>
#include <iostream>
#include <vector>

void printSquare(int x) {
    std::cout << x * x << " ";
}

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

    // 使用 std::for_each 打印每个元素的平方
    std::for_each(vec.begin(), vec.end(), printSquare);
    // 或者使用匿名函数
     std::for_each(vec.begin(), vec.end(), [](int x) { std::cout << x * x << " "; });
    return 0;
}

//输出
1 4 9 16 25

传递引用的case: https://www.zhihu.com/question/37435965

#include <iostream>
#include <memory>
#include <vector>
#include <algorithm>
#include <functional>

class Print
{
public:
    void print(std::vector<int>& vec) {
        std::cout << "print" << std::endl;
        vec.push_back(1);
    }
};
typedef std::shared_ptr<Print> PrintPtr;

int main()
{
    PrintPtr ptr = std::make_shared<Print>();
    std::vector<PrintPtr> vec = { ptr };
    std::vector<int> intvec;
    std::for_each(vec.begin(), vec.end(),
                  std::bind(&Print::print, std::placeholders::_1, std::ref(intvec)));
   //std::bind返回function类型,在for_each遍历vec时,print函数传入的对象就是ptr,对每个ptr调用print函数,绑定的参数是intvec的引用。
    std::cout << "intvec.size=" << intvec.size();
}

//结果
print
intvec.size=1

 

  

标签:std,cout,元素,C++,用法,vec,each,include
From: https://www.cnblogs.com/BlueBlueSea/p/17963590

相关文章

  • C++U3-第09课-递归函数的应用
    学习目标 斐波那契数列例题  我们需要求出斐波那契第n项的值是多少【思路分析】我们用递归的方式去求解,当第一项和第二项返回1,否则返回前两项的和当前为第一项和第二项返回1当前不为第一项和第二项返回前两项的和定义n并把n输入,带入到递归求解【参考代......
  • C#中substring ()的用法
    String.SubString(int index,int length)  index:开始位置,从0开始   length:你要取的子字符串的长度  示例:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespacestr_sub{classProgram{staticvoidMain(string[]args){strin......
  • C++ 学习宝藏网站分享
    C++学习宝藏网站分享1.C++在线参考手册Cppreferencehttps://zh.cppreference.comC++开发者必备的在线参考手册,是我最常访问的C++网站之一。作为参考手册,不仅包含了语言本身的词法、语法特性,还包含了对C++标准库的介绍:需要include哪个头文件、接口参数/返回值说明......
  • C++源码中司空见惯的PIMPL是什么?
    前言:C++源码中司空见惯的PIMPL是什么?用原始指针、std::unique_ptr和std::shared_ptr指向Implementation,会有什么不同?优缺点是什么?读完这篇文章,相信你能搞懂这种设计方式并将其运用于实践,也将更容易阅读源码。1.PIMPL是什么?PIMPL是PointertoIMPLementation的缩写,意思是指......
  • C++多线程并发(一)--- 线程创建与管理
    目录进程和线程的区别何为并发?C++11线程基本操作C++11新标准多线程支持库std::thread类成员函数std::thread的关键总结C++中多线程创建C++的多线程可以充分利用计算机资源,提高代码运行效率。在这里总结了一些多线程应用过程中的基本概念和用法。进程和线程的区别进程是一......
  • C++实现文件内查找字符串
    实现概要:读取放入buf后查找匹配的第一个字符然后使用seek()移动文件指针,peek()查看剩余的字符是否匹配如果剩余的字符匹配把该字符串在文件中的位置push进一个vector<int>中再继续查看剩余的文件内容//str2.cpp--capacity()andreserve()#include<iostream>......
  • 从C向C++4——对象特性
    一.构造函数1.构造函数 在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。 我们通过成员函数setname()、setage()、setscore()分别为成员变量name、age、score......
  • C++ --- 智能指针
    一、智能指针存在的意义智能指针主要解决以下问题:(1)内存泄漏:内存手动释放,使用智能指针可以自动释放。(2)共享所有权指针的传播和释放,比如多线程使用同一个对象时析构问题。 智能指针的实现依赖于C++语言的RAII(资源获取即初始化)技术,即资源的获取和释放应该与对象的构造和析构分......
  • Go标准库:Go template用法详解
    本文只介绍template的语法和用法,关于template包的函数、方法、template的结构和原理,见:深入剖析Gotemplate。入门示例以下为test.html文件的内容,里面使用了一个template语法{{.}}。<!DOCTYPEhtml><html> <head> <metahttp-equiv="Content-Type"content="text/html;char......
  • KY199 查找C++
      二分查找,没什么好说的。关键在于排成有序数组。然而C++调用sort就可以了。#include<iostream>#include<algorithm>#include<cstdlib>usingnamespacestd;booljudge(int*A,intn,intt){inthead=0;inttail=n-1;while(head<=tail){......