当前位置: 首页 > 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,避免意外修改。

http://www.dtcms.com/a/59358.html

相关文章:

  • 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盘
  • C++数组,链表,二叉树的内存排列是什么样的,结构体占多大内存如何计算,类占多大内存如何计算,空类的空间是多少,为什么?
  • Linux进程概念(二)
  • 若依vue前端queryParams搜索下拉框无法重置或者重置值有问题
  • SpringBoot(一)--搭建架构5种方法
  • 基于控制障碍函数(Control Barrier Function)的二次规划(QP)控制
  • Good Bye 2013 F. New Year Tree 倍增、思维
  • 原函数存在定理
  • 一个基于C语言的猜数字小游戏
  • 【打卡day3】字符串类
  • clickhouse查询效率低