void setscore(deque<ph>&player) //打分
{
for (deque<ph>::iterator nb = player.begin(); nb != player.end(); nb++) //大容器
{
deque<int>d;
for (int i = 0; i < 10; i++) //评委打的分
{
d.push_back(rand() % 40 + 60);
}
sort(d.begin(), d.end()); //排序
d.pop_front();
d.pop_back();
float number = 0;
for (int i = 0; i <d.size(); i++) // 平均分
{
number += d.at(i);
}
(*nb).score =number/d.size();
cout<< (*nb).name<<":平均分为:"<<(*nb).score;
cout << endl;
}
}
为什么循环里面的deque可以反复创建
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在C++中,
deque
(双端队列)是一种STL容器,它支持在两端进行高效的插入和删除操作。在你提供的代码片段中,循环内部每次迭代都创建了一个新的deque<int>
对象d
。这是因为deque d;
这条语句定义了一个局部变量,在每次进入内部循环时,都会初始化一个新的空deque。问题解析:
- 在外层循环中,对player deque中的每个元素(ph类型)进行打分处理。
- 内部循环则是模拟评委打分过程,每次都生成一个新的deque
d
来存储某一次的10个评分。 - 每次内部循环结束后,计算并赋值当前选手的平均分,然后
d
这个局部变量随着内部循环结束而销毁。 - 下一轮外层循环时,再次初始化一个新的deque
d
,用于存储下一位选手的评分数据。
所以,这里的“反复创建”指的是在每次内循环开始时创建一个全新的、独立的deque对象,并且只在该次循环内部使用。由于每次都是局部作用域内的新对象,它们互不影响,可以这样反复创建和使用。
至于为什么可以这样做,是因为内存管理的原理:局部变量在作用域结束时会被自动释放,因此即便在循环内部反复创建,也不会造成内存泄漏等问题,同时满足了程序设计的需求——为每一位选手单独计算一组评委打分的平均分。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 关于区块链和边缘环境搭建的相关问题
- ¥15 windows远程桌面断卡重连软件卡顿问题
- ¥30 Unity 实现扫描效果
- ¥15 HbuilderX检测不到安卓模拟器
- ¥15 这个main已经在filename.obj中定义是什么错 C语言
- ¥15 关于#linux#的问题:exsi8.0系统 怎么更改web访问端口,不用80、443
- ¥15 使用elementor设计样式
- ¥15 谁能提供一个中文版的推销咨询网站连接?
- ¥15 springboot项目程序启动报错
- ¥15 grlb复位后关闭硬限位开关,移动中仍然会触发停止。