森狼藤野 2024-02-12 17:17 采纳率: 66.7%
浏览 5
已结题

为什么循环里面的deque可以反复创建



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;
    }
     
     
}
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-12 17:18
    关注

    引自免费微信小程序:皆我百晓生

    在C++中,deque(双端队列)是一种STL容器,它支持在两端进行高效的插入和删除操作。在你提供的代码片段中,循环内部每次迭代都创建了一个新的deque<int>对象 d。这是因为deque d;这条语句定义了一个局部变量,在每次进入内部循环时,都会初始化一个新的空deque。

    问题解析:

    • 在外层循环中,对player deque中的每个元素(ph类型)进行打分处理。
    • 内部循环则是模拟评委打分过程,每次都生成一个新的deque d来存储某一次的10个评分。
    • 每次内部循环结束后,计算并赋值当前选手的平均分,然后d这个局部变量随着内部循环结束而销毁。
    • 下一轮外层循环时,再次初始化一个新的deque d,用于存储下一位选手的评分数据。

    所以,这里的“反复创建”指的是在每次内循环开始时创建一个全新的、独立的deque对象,并且只在该次循环内部使用。由于每次都是局部作用域内的新对象,它们互不影响,可以这样反复创建和使用。

    至于为什么可以这样做,是因为内存管理的原理:局部变量在作用域结束时会被自动释放,因此即便在循环内部反复创建,也不会造成内存泄漏等问题,同时满足了程序设计的需求——为每一位选手单独计算一组评委打分的平均分。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月21日
  • 已采纳回答 2月13日
  • 创建了问题 2月12日

悬赏问题

  • ¥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复位后关闭硬限位开关,移动中仍然会触发停止。