当前位置: 首页 > news >正文

C++11新特性 11.基于范围的for循环

一.简介

基本概念:

在 C++ 中,基于范围的 for 循环(Range-based for loop)是一种简化容器遍历的语法糖,适用于所有支持 begin() 和 end() 的容器(如 vectormaparray 等)。以下是其核心用法和注意事项:

语法:

for (元素声明 : 容器) {
    // 操作元素
}
  • 元素声明:可以是值、引用或常量引用(const auto&)。
  • 容器:可以是数组、标准库容器(如 vectormap)或自定义迭代器的类。

使用示例:

#include <iostream>
#include <vector>
using namespace std;

template<class T>
void printV(const vector<T>& v){
    for (const T& v1 : v)
    {
        cout << v1 << " ";
    }
    cout << endl;
}

int main()
{
    vector<int> v1{1,2,3,4,5,6,7,8};
    printV(v1);


    return 0;
}

二.使用细节

1.关系型容器

例如map这种key->value的键值对。

/*
基于范围的for循环
*/
#include <iostream>
#include <vector>
#include <map>
using namespace std;

template<class T>
void printV(vector<T>& v){
    for (T& v1 : v)
    {
        cout << v1 << " ";
    }
    cout << endl;
}

template<class T,class U>
void printM(map<T,U>& m)
{
    for(auto& it : m){
        //用fisrt访问key,second访问value
        cout << "id:" << it.first << ",name:" << it.second << endl;
    }
}

int main()
{
    vector<int> v1{1,2,3,4,5,6,7,8};
    printV(v1);

    map<int,string> m;
    m.insert({1,"liu"});//初始化列表
    m.insert(make_pair(2,"wang"));

    //emplace 直接在 map 内部构造键值对,避免临时对象的拷贝或移动,效率更高。
    //特点:若键已存在,构造失败(不会覆盖原值)。
    m.emplace(3,"ren");//C++11方法
    //4. emplace_hint 方法(C++11 起)
    //与 emplace 类似,但提供一个迭代器作为插入位置的提示,可能优化插入效率。
    auto hint = m.begin();  // 初始提示位置
    hint = m.emplace_hint(hint, 4, "liu");
    hint = m.emplace_hint(hint, 5, "wang");
    printM(m);

    return 0;
}

2.注意事项

  • 优先使用 const auto&:避免不必要的拷贝。
  • 使用 auto 代替显式类型:提高代码简洁性和可维护性。
  • 遍历 map 时使用 const:因为 map 的键是 const,避免意外修改。

相关文章:

  • deepseek在pycharm中的配置和简单应用
  • ThinkPhp 5 安装阿里云内容安全(绿化)
  • DeepLabv3+改进6:在主干网络中添加SegNext_Attention|助力涨点
  • Pycharm 取消拼写错误检查(Typo:in word xxx)
  • 【后端开发面试题】每日 3 题(九)
  • SQL 别名
  • 计算机网络笔记(二)——1.2互联网概述
  • 祛魅 Manus ,从 0 到 1 开源实现
  • 本地fake server,
  • 【IPFS应用开发】IPFS播放器-上传助手
  • 目标检测热力图的生成代码(基于GridCam)生成的
  • Vue3——Fragment
  • Java的基础:对象
  • 单细胞多数据集整合和去除批次效应教程,代做各领域生信分析
  • 【C语言】自定义类型:结构体,联合,枚举(上)
  • Deeplabv3+改进5:在主干网络中添加EMAattention|助力涨点!
  • Python3 与 VSCode:深度对比分析
  • 如何在 Windows 10 启用卓越性能模式及不同电源计划对比
  • 深入了解Linux —— git三板斧
  • 在ubuntu 24 命令行 下,制作无人值守ubuntu-24.04.2-desktop 桌面版安装U盘
  • 钟睒睒:不反对代工,但农夫山泉目前所有产品是无法代工的
  • 文化厚度与市场温度兼具,七猫文学为现实题材作品提供土壤
  • 俄乌上周在土耳其直接谈判,外交部回应
  • 上海小学生暑(寒)托班会增设开办期数、延长办班时间吗?团市委回应
  • 北斗系统全面进入11个国际组织的标准体系
  • 广药集团原董事长李楚源被“双开”:去年8月被查,曾多次发表争议言论