首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我对range-for循环的更改不起作用?

range-for循环是C++11引入的一种循环语法,用于遍历容器或者数组中的元素。它的语法形式为:

代码语言:txt
复制
for (auto& element : container) {
    // 对element进行操作
}

在range-for循环中,element是容器中的每个元素的引用,可以直接对其进行修改。然而,如果对element进行修改后发现原容器中的元素并没有改变,可能有以下几个原因:

  1. 使用了值传递而非引用传递:在range-for循环中,如果使用值传递方式,即auto element,那么对element的修改只会影响到循环体内的局部变量,不会改变原容器中的元素。应该使用引用传递方式,即auto& element,才能修改原容器中的元素。
  2. 容器中的元素类型是不可修改的:有些容器中的元素类型是const的,即不可修改的。在这种情况下,无论使用引用传递还是值传递,都无法修改元素的值。
  3. 容器中的元素是临时对象:如果容器中的元素是临时对象,即右值,那么无论使用引用传递还是值传递,都无法修改元素的值。因为临时对象是无法获取其引用的。
  4. 循环体内的操作没有正确执行:可能是循环体内的操作逻辑有误,导致修改没有生效。需要仔细检查循环体内的代码逻辑。

综上所述,如果对range-for循环中的元素进行修改不起作用,需要检查是否使用了引用传递、元素类型是否可修改、元素是否为临时对象以及循环体内的操作是否正确执行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么模型准确率都 90% 了,却不起作用

但在处理这类二元分类模型时,样本数量不平衡两个类别通常会让事情变得棘手,而大多数数据分析师所依赖精度指标也并不是万能。...成功预测将为模型加分,而失败预测也会有一定扣分。...,如下: 有假负:15,000/(15,000+5,000)= 75% 如果你需要处理数据集分类不平衡,且找回所有问题案例需求迫切,那么召回率将会是个很好评估标准。...这种情况中假正可能也就是多发几封邮件,你大概率也不会在意有五百个产品非常忠诚客户会受到多余邮件而造成浪费,我们希望是能通过消息提醒,保留住那些潜在客户流失。...F1= 2 X (精准度 * 召回率) / (精准度 + 召回率) 可以说,F1 是精确度是召回率组合,它可以帮你确定模型性能,并假正和假负进行赋权。

1.8K30

为什么改变了区块链看法

大学时学习密码学,而比特币作为一个新颖且非常规概念出现。在一门课程中,我们分析了与比特币非常类似的加密货币密码学构建模块。尽管我钦佩算法和协议精妙,但我 区块链技术 并不特别感兴趣。...主要保留意见是,尽管其设计创新,但它并没有解决个人认为重要任何问题。 区块链怀疑一直持续到几个月前,当时与 Aerospike 一位新客户合作, BSV 协会。...BSV 区块链吞吐量挑战解决方案 无需深入探讨细节,基于区块链加密货币有限吞吐量主要源于 区块链块大小。...在 前一篇文章 中,详细阐述了为什么这种方法非常低效。 通常,这些解决方案采用可扩展数据库,通过复杂数据提取、转换、加载 (ETL) 流程从不可扩展 RDBMS 中检索数据。...没有不断升级复杂性。没有耗时数年、耗资数十亿美元项目来启动一个应用程序。 正是这种愿景改变了区块链看法。

8210

为什么JavaScript未来持乐观态度?

JavaScript持乐观态度。 开发人员希望编写 JavaScript,并希望它能在浏览器、服务器或 Edge运行。...拥有一套约定俗成通用API(即标准)和支持相同接口平台(如跨浏览器支持),意味着网络开发者现在可以一次学习,到处编码。 本文将概述近期在浏览器、服务器和 edge Web 平台所做改进。...但这是目前最好很乐观。由于不需要花一周时间去研究深奥IE错误,数千(或数百万)开发者时间将被累计节省。 下面是一个例子,说明这种排列组合如何使所有的 web 开发者受益。...服务器上 JavaScript(和 TypeScript)感到乐观。这不仅仅是 fetch。...在这种情况下,将使用 Vercel Edge Function。但也可以是其他边缘计算平台,如 Cloudflare 或 Deno。来说,这段代码最好部分实际上是它相当无聊。

88830

C++核心准则​ES.71: 如果可以,使用范围for代替普通for语句

+ v[i - 1] << '\n'; for (gsl::index i = 0; i < v.size(); ++i) // possible side effect: can't be a range-for...程序员或者好静态分析软件或许可以判断f(v,&v[i])中v实际上并不存在副作用,因此该循环可以被重写。通常情况下,最好避免在循环体中“乱用循环变量”。...Note(注意) Don't use expensive copies of the loop variable of a range-for loop: 不要在循环体中进行代价高昂循环变量拷贝。...Better: 这会导致vs每个元素都被拷贝。较好做法是: for (string& s : vs) // ......检查循环代码,如果一个传统循环只是按照顺序读取每个元素,而且元素操作不存在副作用,使用范围for语句重写循环代码。

48220

为什么要使用弱口令?兼谈用户口令保护措施

不信任你 是的,不信任你! 不知道你是如何处置口令。 之前曾经收到过一些注册确认邮件,结果邮件中竟然包含明文口令,自此,凡是注册都得小心翼翼,能用弱口令就先用弱口令。...口令是隐私,这个数据,它是! It is mine! 它不属于服务提供方。...但试想,作为服务提供方,我们用户口令保护真的到位了吗?...(3)很典型一个场景,拿已泄漏口令逐个去猜。你应用能够防住吗?也许防住了批量(用户:密码)不断尝试,但你见过还有人拿固定弱口令去撞用户名场景吗?...;包括限制同一台机器登录频次(如采取 IP + User-Agent 或其它具有唯一属性头部客户端计算机进行标识)、启用 CSRF-Token,也要考虑使用固定弱密码来撞用户名场景; 4.在注册及修改密码界面

96020

【Rust日报】2021-05-08 Rust第二印象以及为什么认为它是最好通用语言!

一个Rust新AWS SDK:alpha发布 我们很兴奋地宣布Rust新AWS SDKalpha版本发布。...在Rust中开发AWS客户想要一个本地Rust SDK,这样他们就可以使用他们习惯语言结构,而Rust新客户想要一个与他们在其他语言环境中使用SDK行为类似的SDK。...文章链接,https://aws.amazon.com/cn/blogs/developer/a-new-aws-sdk-for-rust-alpha-launch/ Rust第二印象以及为什么认为它是最好通用语言...在2019年11月写了Rust第一印象。此后,花了几次时间研究它,但主要是在非常简单代码上进行,而当我喜欢使用Rust时,并不感到惊讶。...从表面上看,这种感觉或多或少就像我所涉猎许多其他语言一样! 上个月,当我最终决定用Rust构建一个现实用例时,一切都改变了。

50140

(推荐,深度总结)聊聊为什么技术要先广后精,技术新人几点建议

认为,IT行业实际上是一个两极化非常严重行业,有的人工资非常高,有的人却找不到工作,这是为什么呢?要回答这个问题,我们首先要了解工资高这一波人中,都有什么共同点。...,他所要求不仅仅是你CV这一个专业领域积累,更重要是你深度学习其他技术,如对抗生成、强化学习等技术熟练程度,以及Hadoop、分布式、实时流计算等有着扎实基础。...在这份JD中,我们可以看到,工作经验只要1~3年,但是却仍然需要对分布式计算、数据挖掘等相关内容比较熟悉,那么这个时候,我们似乎就有些疑问了,为什么现在都是在这么要求,只在自己专业领域中做好不可以吗...,http调用还是比较熟悉”,好吧,这个时候你又需要把你训练好模型部署发布成一个接口,这时候,你会发现又有新知识了,因为你只对python熟悉,所以你通过查找资料,发现可以使用flask框架来做相关...所以,话又说回来,为什么认为技术要先广后精,因为只有站在全局来看待问题,你才能够知道应该从那个点突破,来去深入研究,只有这样,我们才能使自己职业道路走得越来越宽。

74830

python 元组删除某个元素_python二维数组

大家好,又见面了,是你们朋友全栈君。 想写一些东西从数组中删除一个特定元素。 知道必须for遍历数组以查找与内容匹配元素。...假设有一系列电子邮件,并且想摆脱与某些电子邮件字符串匹配元素。 实际上想使用for循环结构,因为还需要对其他数组使用相同索引。...不完全想使用for循环,以便可以重用索引 您不应该在迭代列表时更改列表。 为什么不应该这样做? 也不起作用。...看一下这个:在迭代过程中,您不得修改列表 @cularis更喜欢Bogdans答案,但是如果您随后中断了for循环,可以一次修改列表吗? 您也可以以相反顺序遍历列表。...然后,删除元素索引将引用最后检查元素,但是当索引递减时,它将指向您要检查下一个元素。 不相信此行为受支持,但在迄今为止版本中效果很好,因此很有用。 您不需要迭代数组。

1.7K20

【笔记】《C++Primer》—— 第3章

其中字符串和向量都是C++STL类,用好的话会比结尾数组方便很多。C11很多特性都让原本难以编写C++变得方便许多,越来越喜欢C++了。这篇同样会稍长一些,这次试了很多代码。...标数组,vector有极其类似与数组操作,初始化等操作也十分相近,也是同样当初始化指定内容数量不够时其他内容会进行默认初始化。...(也就是不要初始化大小后再用循环来逐个赋值,而是要选择不断push_back)。 vector自然也有类似于string各种操作,不表。...其中end得到是指向容器最后一个元素还要后面的空元素迭代器,一般用于循环中判断遍历结束。 迭代器使用方法很简单,几乎是指针一样。...3.6 多维数组也就是数组数组。 可以使用多层花括号来初始化,未初始化元素遵循之前规律。 配合C11auto和range-for可以使得多维数组遍历变得异常方便。

91920

在 JavaScript 中对象深拷贝(及其工作原理)

现在对于大多数初学者来说,他们会试着通过将 testObject 分配给新变量来创建这个对象副本,以便在其代码中进行操作。很抱歉用这种方法行不通。 下面是一个代码片段,说明了为什么不起作用。...你所谓副本做任何更改也将反映在原始对象中。 循环遍历对象并将每个属性复制到新对象也不起作用。...将每个属性复制到新对象循环只会复制对象上可枚举属性。可枚举属性是将要出现在 for 循环和 Object.keys 中属性。 2....这意味着如果更改复制对象中嵌套对象,原始对象也会更改。 4. 不复制任何属性描述符。...对于仅存储基本类型(如数字和字符串)简单对象,上述浅层复制方法将起作用。但是如果对象具有其他嵌套对象引用,则不会复制实际对象。你只会复制引用。

2.3K30

UE4UE5TSet和TMap

其实就是上面Elementsindex。这里你肯定会说,为什么要中转一层,直接用Hash值作为index不就好了?...自己实现HashMap时候,有一个问题就是怎样把一个任意数字,映射到有限范围内,最简单做法就是取余。而这里为什么说是快速操作呢?...为什么要专门提这一点呢?因为这里UE写非常晦涩,但这又是一个非常关键细节,之前项目中碰到过这里BUG,就是因为有人随手加了一个内存置空(好像是Memzero)引发循环血案。...操作 这些就没什么需要多说了,具体可以自行看源码,这里把函数大致列了一下 TSet和Map都有的函数 TSet函数 需要额外提几点: 访问可能不存在元素时。...因为UE容器,都实现了begin(),end(),所以支持C++range-for语法,可以放心使用:

2.9K10

C++避坑---lambda表达式变量捕获与mutable关键字

预想到a在f中两次输出都应该为1,但真实输出结果是在两次f调用中,实现了累加,后来查阅资料发现: lambda 表达式是纯右值表达式,它类型是独有的无名非联合非聚合类类型,被称为闭包类型...当访问变量时,访问是它被捕获副本(对于以复制捕获实体)或原对象(对于以引用捕获实体)。...除非 lambda 表达式中使用了关键词 mutable,否则函数调用运算符或运算符模板 cv 限定符都会是 const,并且无法从这个 operator() 内部修改以复制捕获对象。...如 auto、template 和 decltype 得到类型、lambda 、range-for 循环转换、潜藏隐式类型转换等。...数据成员为捕获到a,并将其实例化为类对象f,然后调用了两次operator(),因此a值打印也是累加,即两次结果分别为1和2。

44010

初学html常见问题总结

:width= height=”20″ ,此时,无论怎么更改height值就是不起作用,因为浏览器将“width=”后面的内容都做为width属性值,所以不能正确识别height=”20″ 含义...:width= height=”20″ ,此时,无论怎么更改height值就是不起作用,因为浏览器将“width=”后面的内容都做为width属性值,所以不能正确识别height=”20″ 含义...= height=”20″ ,此时,无论怎么更改height值就是不起作用,因为浏览器将“width=”后面的内容都做为width属性值,所以不能正确识别height=”20″ 含义。...= height=”20″ ,此时,无论怎么更改height值就是不起作用,因为浏览器将“width=”后面的内容都做为width属性值,所以不能正确识别height=”20″ 含义。...= height=”20″ ,此时,无论怎么更改height值就是不起作用,因为浏览器将“width=”后面的内容都做为width属性值,所以不能正确识别height=”20″ 含义。

3.5K41

如何编写可怕 Java 代码?

一切使用异常 你知道循环吗?...差一错误(英语:Off-by-one error,缩写 OBOE,是在计数时由于边界条件判断失误导致结果多了一或少了一错误,通常指计算机编程中循环多了一次或者少了一次程序错误,属于逻辑错误一种)很容易犯...在 Java 中没有什么是真正 final 一些开发人员认为他们通过将 final 关键字放在变量前面来以说明不会去更改这个值。推荐:为什么要加 final 关键字了?...事实是——有时候你真的想要改变一个 final 字段值,所以这是如何做: 注意,在构造函数中提供最终值时,这对很有用。如果你在类中设置了 final 值,那么它将不起作用。...尽可能使用最短名字(a, b, n 最好)! 不要学习任何新知识–你总是最了解 一个程序员最重要品质就是自己有信心。相信自己什么都懂,没有什么可学

1K10

学会使用函数式编程程序员(第1部分)

这使得调试非常困难,因为变量可以在程序任何地方更改。所以,当你有一个错误,因为一个变量在错误时间被更改为错误值,这不是很好。 此时,你可能会想,“怎么可能只使用纯函数呢?”...你可能又会想 :“怎么能在没有变量情况下做任何事情呢?” 我们想一下什么时候需要修改变量。通常会想到两种情况:多值更改(例如修改或记录对象中单个值)和单值更改(例如循环计数器)。...函数式编程使用参数保存状态,最好例子就是递归。是的,是没有循环。“什么没有变量,现在又没有循环? ”讨厌你! ! !”...虽然这是有争议,而且更可能是一个熟悉问题,但非递归循环需要可变性,这是不好。 在这里,还没有完全解释不变性好处,但是请查看全局可变状态部分,即为什么程序员需要限制来了解更多。...还没有完全解释不可变性(Immutability)在这里好处,但请查看 为什么程序员需要限制全局可变状态部分 以了解更多信息。

66730
领券