有一个用户信息类CUserInfo,包括一个类成员函数initdatd(用于初始化用户数据),代码如下:
class CUserInfo
{
public:
void initdata(void)
{
// ...
}
};
假设有一个列表存放所有的用户数据:
std::list<CUserInfo> userlists;
我们需要定期的对userlists的所有用户做一次初始化操作,也即是调用类成员函数CUserInfo::initdata;
普通利用for循环实现要求
正常来讲,很多人(包括我在内)可能第一时间会想到使用for循环,下面给出例子代码;
std::list<CUserInfo>::iterator iter;
for (iter=userlists.begin(); iter!=userlists.end(); iter++)
{
(*iter).initdata();
}
使用for循环确实可以实现要求,但很多C++专家、编程手册和历史经验告诉我们,“在处理STL容器的时候,尽量不要自己写循环;”“算法函数优先使用于循环;”“…”
同样我也推荐使用下面的std::for_each和std::mem_fun_ref方案。
使用std::mem_fun_ref函数
利用std::for_each和std::mem_fun_ref同样可以实现我们想要的功能,代码如下:
for_each(userlists.begin(), userlists.end(), std::mem_fun_ref(&CUserInfo::initdata));
“什么?”“不可能!”“只有一行代码?”
“是的,没错!”“只有一行代码。”
使用std::mem_fun函数
或许有些人会问,那mem_fun怎么用?用在哪里?
而有些人会问,如果我是存的CUserInfo*,怎么处理?
其实你们问的也就是下面我要给出的这段代码,解决的问题;
std::list<CUserInfo*> userlists;
for_each(userlists.begin(), userlists.end(), std::mem_fun(&CUserInfo::initdata));
总结
std::mem_fun和std::mem_fun_ref所实现的是相同的功能,可以这么理解之间的差异,mem_fun用于处理容器对象指针,而mem_fun_ref用于处理容器对象实体。
分享到:
相关推荐
在 C++ STL 中,for_each 算法是一种非常有用的算法,它可以对容器中的每个元素应用一个函数对象(仿函数)。在本文中,我们将详细介绍 for_each 返回值的使用方法和实现原理。 for_each 算法概述 for_each 算法是...
C++读取STL文件,输出所有三角形的顶点坐标
本资源“stlshow_stl分层_STL分层_stlmatlab_STL切片_stl分层_源码.rar.rar”包含了与STL文件处理相关的代码和工具,特别是关于STL模型的分层和切片操作,这对于3D打印过程至关重要。 1. STL文件结构: STL文件由一...
STL(STereo Lithography)文件格式是一种广泛用于3D打印和计算机辅助设计(CAD)领域的文件格式。它主要存储三维几何模型的信息,通常由一系列三角面片组成,每个三角面片都包含三个顶点坐标和法线方向。在本场景中...
STL文件,全称为“Standard Tessellation Language”或“StereoLithography Format”,是一种广泛应用于3D打印、计算机辅助设计(CAD)和快速原型制造(Rapid Prototyping)领域的文件格式。它主要用来存储三维几何...
#ifndef __SGI_STL_INTERNAL_ALGOBASE_H #define __SGI_STL_INTERNAL_ALGOBASE_H #ifndef __STL_CONFIG_H #include <stl_config.h> #endif #ifndef __SGI_STL_INTERNAL_RELOPS #include <stl_relops.h> #endif #...
### STL算法:for_each与transform详解 #### 一、for_each算法 `for_each` 是C++标准模板库(STL)中的一个非常实用的算法,主要用于遍历容器中的每个元素,并对这些元素执行指定的操作。这使得代码更加简洁且易于...
压缩包内的文件“STL_BOOK”可能是一个文档或者教程,详细讲解了STL语言的基础知识、编程规范以及实例解析。这个文件对于初学者或者需要提升STL编程技能的工程师来说,是一份宝贵的参考资料。通过阅读这份文档,读者...
STL(STereoLithography)格式是一种广泛用于3D打印和计算机辅助制造的文件格式,它由一系列三角形面片组成,代表三维物体的表面。在3D打印过程中,STL分层是一项重要的预处理步骤,将模型按指定厚度分割成多个二维...
这个压缩包“stlshow_stl分层_STL分层_stlmatlab_STL切片_stl分层.zip”包含与STL文件处理相关的源代码,特别是关于STL的分层、切片和在MATLAB环境中的操作。下面将详细介绍这些关键概念和相关知识点。 1. **STL...
`标签`中的“stl__opengl”指的是使用OpenGL来显示STL模型。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D矢量图形。开发者可以使用OpenGL API来加载和绘制STL文件中的三角面片,从而在屏幕上生成3D视图。 ...
STL(STereoLithography)文件格式是3D打印和计算机辅助设计(CAD)领域中广泛使用的一种标准文件格式。这种格式最初由3D Systems公司开发,用于描述三维几何形状,尤其是为立体光刻(Stereo Lithography Apparatus...
STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、可重用的数据结构和算法。STL的主要组件包括容器(如vector、list、set等)、迭代器、算法和函数对象。这些...
在本项目中,我们主要探讨的是如何在VC++环境下,结合OpenGL库,实现STL(Standard Tessellation Language)文件的读取与可视化操作,特别是通过鼠标交互进行模型的旋转。STL是一种广泛应用的3D模型文件格式,常用于...
STL文件,全称为“Standard Tessellation Language”或“Standard Triangle Language”,是一种广泛用于3D打印、计算机图形学和CAD领域的文件格式。它主要存储三维模型的表面三角形网格,通常用于快速原型制造和3D...
STL(STereo Lithography)文件格式是一种广泛用于3D打印和计算机辅助设计(CAD)领域的数据格式。它主要存储三维几何模型的表面信息,由一系列三角形面片构成。在C++编程中,处理STL文件是进行3D图形处理和建模的...
在“STL.rar_3d_STL_STL文件显示_labview_stl顶点向量”这个项目中,我们将探讨如何使用LabVIEW(Laboratory Virtual Instrument Engineering Workbench)来处理和可视化STL文件,以及如何显示其中的顶点和法向量。...
这个名为"sgi_stl.zip_VS2010 sgistl_sgi_sgi stl_stl SGI_vs2010 sgi pudn"的压缩包文件,显然包含了与SGI STL版本相关的资源,特别强调了它已经针对Visual Studio 2008进行了修改以确保兼容性,并且还提供了一些...
C++中的STL,全称为Standard Template Library(标准模板库),是C++编程语言中一个极其重要的组成部分。它提供了一组高效、灵活且可重用的容器、算法和迭代器等编程工具,大大简化了复杂的数据结构操作和算法实现。...
很多做三维重建的开发人员都需要读取三维数据,这个程序实现了读取三维数据文件(stl文件)的函数,并用opengl显示出来了,很有参考价值的,其中有函数readstlfile就是实现了从stl文件中读取三角面片的数据。