首页 > 编程语言 >【C++基础知识——迭代器 引入】

【C++基础知识——迭代器 引入】

时间:2024-09-24 21:52:23浏览次数:10  
标签:std 容器 迭代 元素 C++ 基础知识 修改 ageMap

问题引入

#include <iostream>
#include <map>
#include <string>

int main() {
    // 定义一个 std::map 容器
    std::map<std::string, int> ageMap;
    ageMap["Alice"] = 30;
    ageMap["Bob"] = 25;
    ageMap["Charlie"] = 35;

    // 使用迭代器遍历并修改容器中的元素
    for (auto it = ageMap.begin(); it != ageMap.end(); ++it) {
        std::cout << it->first << " is " << it->second << " years old." << std::endl;

        // 修改元素的值
        it->second += 1;
    }

    std::cout << "After incrementing ages:" << std::endl;

    // 再次使用迭代器遍历容器,打印修改后的值
    for (auto it = ageMap.begin(); it != ageMap.end(); ++it) {
        std::cout << it->first << " is now " << it->second << " years old." << std::endl;
    }

    return 0;
}

输出结果:

Alice is 30 years old.
Bob is 25 years old.
Charlie is 35 years old.
After incrementing ages:
Alice is now 31 years old.
Bob is now 26 years old.
Charlie is now 36 years old.

**问题**:这里的it 到底是引用还是拷贝?如果是拷贝,为什么对于拷贝的内容设置了之后会生效?

问题回答

  • 在这个函数中,it 是一个迭代器,不是引用也不是拷贝。迭代器本身是一个轻量级对象,通常包含指向容器元素的指针或类似的结构。通过迭代器访问和修改容器中的元素是有效的。

  • 迭代器是指向容器元素的指针或类似结构,通过迭代器可以访问和修改容器中的元素。因此,it 不是对元素的拷贝,而是指向元素的一个指针或类似结构。通过迭代器修改元素是有效的,修改会反映在原始容器中。

代码解释

  1. 定义 std::map 容器:

    • std::map<std::string, int> ageMap; 定义一个 std::map 容器,键为 std::string 类型,值为 int 类型。
    • ageMap[“Alice”] = 30; 等语句向容器中插入元素。
  2. 使用迭代器遍历并修改容器中的元素:

    • for (auto it = ageMap.begin(); it != ageMap.end(); ++it) 使用迭代器遍历 ageMap 容器。
    • std::cout << it->first << " is " << it->second << " years old." << std::endl; 打印每个元素的键和值。
    • it->second += 1; 修改每个元素的值,将年龄加 1。
  3. 再次使用迭代器遍历容器,打印修改后的值:

    • 再次使用迭代器遍历 ageMap 容器,打印修改后的值。

总结

it 是一个迭代器,不是引用也不是拷贝。通过迭代器 it 修改容器中的元素是有效的,修改会反映在原始容器。

标签:std,容器,迭代,元素,C++,基础知识,修改,ageMap
From: https://blog.csdn.net/XWWW668899/article/details/142500463

相关文章

  • 【入门岛·第1关】linux 基础知识
    目录闯关任务完成SSH连接与端口映射并运行hello_world.py闯关任务完成SSH连接与端口映射并运行hello_world.py1在远程主机上建立hello_python.py程序并运行,查看程序运行的端口:importsocketimportreimportgradioasgr#获取主机名defget_hostname():hostname......
  • C++基础
    1.第一个C++程序#include<iostream>//固定格式usingnamespacestd;intmain(){inta=10//定义变量;cout<<a<<endl;//打印变量system("pause");return0;}2.常量与变量的类型只要变量前加const与#define(宏常量)3.关键字3......
  • C++中的类型推断机制
    1.decltype的作用decltype是C++11引入的一个关键字,用来推断表达式的类型。它返回的是表达式的精确类型,包括引用和const限定符等。例子:intx=5;decltype(x)y=x;//y的类型是int在这个例子中,decltype(x)返回int,因为x是一个int类型的变量,所以y的类型也被推......
  • 【C++】类和对象——下
    一.类和对象(下)1.再探构造函数•之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后⾯跟⼀个放在括号......
  • 《 C++ 修炼全景指南:十二 》用红黑树加速你的代码!C++ Set 和 Map 容器从入门到精通
    摘要本文详细介绍了基于红黑树实现的Set和Map容器,包括其底层设计原理、插入和删除操作的实现细节、性能分析与优化策略,以及实际应用场景和未来发展方向。通过采用红黑树的数据结构,Set和Map容器能够高效地处理有序数据,保持O(logn)的时间复杂度,适用于各种数据存储......
  • Vue router 4 基础知识讲解
    1.Vuerouter4基础在构建现代Web应用时,单页应用(SPA)因其流畅的用户体验和快速的页面切换能力,成为了众多项目的首选架构。然而,在SPA中,随着应用功能的日益复杂,权限控制成为了一个不可忽视的问题。如何确保不同用户只能访问其被授权的资源,是保障应用安全和数据一致性的......
  • C++11新特性:正则表达式
    摘要本文介绍了正则表达式的基础概念,包括元字符、字符类、量词和锚点,展示了其在验证字符串、文本搜索、替换和数据提取中的应用。同时,详细讲解了C++11中正则表达式的使用示例,包括std::regex。正则表达式正则表达式(RegularExpressions)是一种强大的文本处理工具,它使用单个字符......
  • 第8章 C++IO流类库
    练习8.1 编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定流中读取数据,直至遇到文件结束标识时停止。它将读取的数据打印在标准输出上。完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态。练习8.2 测试函数,调用参数为cin.答案:1#include<ios......
  • 【每周例题】蓝桥杯 C++ 生物芯片
    生物芯片题目生物芯片题目分析·1.下面是亮灯规律,剩下的以此类推:我们可以看到,不亮灯的都是n的平方 2.所以亮灯的数目=该区间内所有灯的数量-不亮灯的数目(简而言之,所有不亮灯的号码开方后都是整数)代码#include<iostream>#include<cmath>usingnamespacestd;......
  • 分享C++程序员面试八股文(九)
    以下是C++常见八股文(九):一、模板元编程(TemplateMetaprogramming)解释模板元编程的概念和优势概念:模板元编程是一种在编译期进行编程的技术,利用C++模板的强大功能,通过模板参数和特化等机制,在编译期执行各种计算和类型操作。它可以被看作是一种将程序的一部分逻辑在编译......