系列C++问题请教高手之四:STL for_each algorithm & copy construtor

karlzheng 2007-04-11 10:19:23
昨天照Bjarne老兄的书写了一段代码如下,脑海中有一些问题:
1。sum1 = for_each(vi.begin(), vi.end(), sum1);这一个语句中sum1=调用了n_Sum& operator =(const n_Sum& sumclass),如果没有定义operator =,该程序也可以运行,那么是不是系统自动为类对像调用了一个赋值构造函数?--会自动给成员变量赋值?
2。code guru Scott Meyer告诉我们:prefer 传引用by 传值,那么在for_each(vi.begin(), vi.end(), sum1)这个语句中有没有办法,把sum1的引用传进去,而不是传sum1的对像--这样写:for_each(vi.begin(), vi.end(), &sum1);是运行不了的,有没有别的办法传引用?



template<class T> class n_Sum
{
T sum;
public:
n_Sum(T i=0):sum(i)
{
}
void operator()(T x)
{
sum += x;
}

n_Sum& operator =(const n_Sum& sumclass)
{
sum = sumclass.sum - 10;
return *this;
}

n_Sum(const n_Sum& S)
{
sum = S.sum -10;
}


T result() const
{
return sum;
}
};


int main()
{

int i;
vector<int> vi;
n_Sum<int> sum1;
for(i=1; i<=100; i++)
{
vi.push_back(i);
}

sum1 = for_each(vi.begin(), vi.end(), sum1);
cout<<"result:"<<sum1.result()<<endl;
return 0;
}
...全文
708 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sirguan 2007-04-12
  • 打赏
  • 举报
回复
函数对象推荐传值不传引用的。
参加effective stl 第 38条
http://www.stlchina.org/documents/EffectiveSTL/index.html
taodm 2007-04-12
  • 打赏
  • 举报
回复
因为在公司竟然无法进csdn blog ,狂汗。
FingerStyle 2007-04-12
  • 打赏
  • 举报
回复
taodm 的blog怎么写道2004年 就不写了 ??
期待 STL和 boost(虽然还没学) 的好文。。。。
taodm 2007-04-12
  • 打赏
  • 举报
回复
google "Effective Standard C++ Library: Explicit Function Template Argument Specification and STL A New Language Feature and Its Impact on Old Programming Techniques"
karlzheng 2007-04-12
  • 打赏
  • 举报
回复
for_each(vi.begin(), vi.end(), &sum1);
=======================================
&sum1这里是取地址不是引用。
传引用要这样
=========================================
取地址和传引用怎么样区别?。。。?
karlzheng 2007-04-12
  • 打赏
  • 举报
回复
问题1, 认真看effective c++
问题2, 可以的。
for_each<vector<int>::iterator, n_Sum<int> &>vi.begin(), vi.end(), sum1);
不过,不要这么做!这违背了for_each的设计语意。
=========================================================================
谢谢,问题1看了effective c++,明白了
问题2:试了一下,OK。佩服你:-)
请问这是模板特化吗? 为什么说违背了for_each的设计语意,能讲明白点吗?
for_each不是要对每一个传进去的对象进行()operate吗?---如本贴所示--我不是想让它对我传进去的对象的拷贝进行操作啊?。。。。

karlzheng 2007-04-12
  • 打赏
  • 举报
回复
&sum1这里是取地址不是引用。
传引用要这样
n_Sum<int>& sum=sum1;
for_each(vi.begin(), vi.end(), sum);
=======================================
试了一下,这样不是想要的结果:即执行了
for_each(vi.begin(), vi.end(), sum);
cout<<"result:"<<sum1.result()<<endl;
之后,打印出来的结果是0而不是5050.....
FingerStyle 2007-04-12
  • 打赏
  • 举报
回复
taodm((不能收CSDN社区短信息,请莫浪费精力)) ( ) 信誉:100 Blog 加为好友 2007-04-12 12:06:14 得分: 0


因为在公司竟然无法进csdn blog ,狂汗。
=============================================
的确应该汗一把。。
Jofee 2007-04-11
  • 打赏
  • 举报
回复
for_each(vi.begin(), vi.end(), &sum1);
=======================================
&sum1这里是取地址不是引用。
传引用要这样
n_Sum<int>& sum=sum1;
for_each(vi.begin(), vi.end(), sum);
taodm 2007-04-11
  • 打赏
  • 举报
回复
问题1, 认真看effective c++
问题2, 可以的。
for_each<vector<int>::iterator, n_Sum<int> &>vi.begin(), vi.end(), sum1);
不过,不要这么做!这违背了for_each的设计语意。

可以使用boost::ref库。
  • 打赏
  • 举报
回复
1 for_each 调用的是
void operator()(T x)
{
sum += x;
}
2 for_each最后一个参数是函数对象 是 by val传递的,见for_each声明
template<class InputIterator, class Function>
Function for_each(
InputIterator _First,
InputIterator _Last,
Function _Func
);
内容概要:本文研究了基于元胞神经网络配流与DQN强化学习的公交线网扰动韧性恢复方法,提出了一种协同模型,通过元胞神经网络进行交通流量分配,并结合DQN(深度Q网络)强化学习优化调度策略,以应对公交网络中突发扰动(如线路中断、客流突变等)下的系统恢复问题。该模型在Matlab平台上实现了仿真验证,结果表明其在提升公交线网运行韧性、加快系统恢复速度、优化资源配置方面具有显著效果。研究涵盖模型构建、算法设计、仿真实验与结果分析全过程,体现了智能算法在城市交通管理中的深度融合与应用价值。; 适合人群:具备一定交通工程、智能优化算法或强化学习基础知识,从事智慧交通、城市规划、运筹优化等相关领域研究的研发人员及高校研究生。; 使用场景及目标:①解决城市公交网络在突发事件下的快速恢复与调度优化问题;②探索元胞神经网络与DQN强化学习在复杂交通系统建模与决策中的协同机制;③为智能公共交通管理系统提供算法支持与仿真验证工具。; 阅读建议:建议结合Matlab代码与文中模型框架同步阅读,重点关注元胞神经网络的配流机制与DQN奖励函数的设计逻辑,通过调整扰动场景参数进行仿真实验,深入理解算法在不同工况下的适应性与优化效果。
内容概要:本文针对传统三电平并网逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应慢等问题,提出一种基于有源中点箝位(ANPC)三电平逆变器的高性能并网控制策略。该策略融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术与电网电压前馈控制,构建了一体化复合控制体系。通过深入分析ANPC拓扑的结构优势,充分发挥其在开关损耗均衡、中点电位稳定和低谐波输出方面的硬件特性;结合DPWMA调制实现等效开关频率倍增,显著优化输出波形质量;利用正负序分离技术精准提取电网正序分量,确保在电压不平衡条件下的精确锁相与对称并网;引入电网电压前馈控制提前补偿扰动,有效提升系统动态响应速度与抗扰能力。多工况仿真结果表明,该方案在稳态运行、电网不平衡及动态扰动等场景下均表现出优异的电能质量、运行稳定性与工况适应性,具备良好的工程应用前景。; 适合人群:具备电力电子与电力系统基础知识,从事新能源并网、逆变器控制策略研究或相关领域开发工作的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于大功率并网逆变器的高性能控制设计;②解决电网电压不平衡、谐波畸变等复杂工况下的并网稳定性问题;③提升新能源发电系统电能质量和动态响应性能。; 阅读建议:建议结合Matlab/Simulink仿真平台进行模型复现,重点理解DPWMA调制原理、正负序分离锁相算法与前馈控制的协同机制,并通过多工况仿真对比验证控制策略有效性。

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧