算法day1

news/2024/10/8 22:51:58/文章来源:https://www.cnblogs.com/spicy-food/p/18453213
https://leetcode.cn/problems/evaluate-reverse-polish-notation/
  • 为什么 string& 要加 &:

    • string& token = tokens[i]; 中,& 表示传递的是 引用(reference),而不是值。这样做的好处是避免创建 token 的副本,从而提高效率,特别是在处理像 string 这种占用较大内存的对象时。传引用可以直接操作原对象,而不是创建新的临时对象。

    举个例子:

    • 如果不加 &,即 string token = tokens[i];,则会创建一个新的 string 对象,复制 tokens[i] 的内容。对于较大的 string,这会增加内存开销和耗时。
    • 加上 & 之后,token 只是 tokens[i] 的引用,不会复制数据,因此效率更高。
  • atoi 是什么意思

    • atoi 是 C 标准库中的一个函数,全称是 ASCII to Integer。它用于将字符串类型的数字(如 "123", "456")转换为 int 类型。
    • 具体来说,atoi(token.c_str())token 中的字符串转换为对应的整数。token.c_str() 是将 string 对象转换为 C 风格的字符数组(const char*),以便 atoi 函数处理。
    • 例如,atoi("123") 返回整数 123

 

                                                                                          在代码 atoi(token.c_str()) 中,使用 c_str() 的原因是:

  • atoi() 函数 是一个 C 语言 的函数,它只能接受 C 风格的字符串作为参数。C 风格字符串是以 const char* 类型的字符数组,并以空字符 \0 结尾。

  • token 是一个 std::string 类型,这是 C++ 的字符串类,不是 C 风格字符串。因此,直接将 token 传递给 atoi() 是行不通的。为了将 std::string 转换为 C 风格字符串,需要调用 c_str()

因此,token.c_str() 通过 c_str() 方法,将 C++ 的 std::string 转换为 C 风格的字符串(const char*),这样才能被 atoi() 函数正确处理。

为什么要这样处理:

C++ 标准库中的 std::string 和 C 标准库中的字符串类型(const char*)是两种不同的类型。std::string 类提供了更高级的字符串操作,但为了兼容和调用像 atoi() 这样只接受 C 风格字符串的函数,必须通过 c_str()std::string 转换为 C 风格字符串。

简单流程:

  1. tokenstd::string 类型,表示一个字符串对象,无法直接传给 atoi()
  2. token.c_str():调用 c_str() 函数将 std::string 转换为 const char* 类型,也就是 C 风格字符串。
  3. atoi(token.c_str())atoi() 接收 C 风格字符串,将它转换为整数类型并返回。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/810238.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建新的 App 页面

完整的页面创建过程包括三个步骤:在 layout 目录下创建 XML 文件创建与 XML 文件对应的 Java 代码在 AndroidManifest.xml 中注册页面配置实现两个 Activity 相互跳转的代码: MainActivity: package com.example.myapplication1;import androidx.appcompat.app.AppCompatActiv…

[Vue] 异步路由组件和非路由组件的区别?

异步路由组件 都知道异步路由组件通过 () => import("./views/Home.vue") 导入路由组件。 但是它怎么就按需加载资源、代码分割了? 不同的代码解析报告 非异步路由组件异步路由组件

课上测试:位运算(AI)

2.使用位运算编写并调用下面函数,把当前时间(使用C库函数获得)设置到TIME中,给出代码,使用git记录过程。为了使用位运算将当前时间设置到一个自定义的 TIME 结构体或变量中(尽管通常我们不会直接用位运算来处理时间,因为时间通常是由多个独立的字段如小时、分钟、秒等组…

vue3 pinia 存数据

pinia是vue2中的vuex,状态管理,可以实现数据共享 1、先安装 npm install pinia2、在main.ts中进行创建和载入3、在src下新建store文件夹 定义存的文件 4、在组件中使用 此时控制台会有具体的值。

笑傲江湖单机版安装教程+虚拟机一键端+GM+10职业单人副本

今天给大家带来一款单机游戏的架设:笑傲江湖10职业单机版单人副本坐骑门徒新时装商完整任务。 另外:本人承接各种游戏架设(单机+联网) 本人为了学习和研究软件内含的设计思想和原理,带了架设教程仅供娱乐。 教程是本人亲自搭建成功的,绝对是完整可运行的,踩过的坑都给你…

Eplan插件 - 自由文本编辑器

前言 使用此插件可以快速完成对项目中的自由文本、路径功能文本的修改、删除等操作。 插件介绍 用户界面 插件UI界面进行了更新,相比较之前的插件界面风格更清爽简洁。功能介绍插件批量将选中文本中的源文本替换为修改文本。 插件支持多种选择方式,可以在绘图区选中文本,也可…

Logisim-015-偶校验检错

仓库地址 https://gitee.com/gitliang/logisim-to-cpu

Android开发:日志功能备忘

临时记一下吧,以后就直接复制粘贴这里面的好了。实现一个日志记录程序的运行状态,并且带上时间信息,可以写一个类灵活调用。 MyLog.java package com.example.networkaccessrestrictions;import static android.content.ContentValues.TAG;import android.content.Context; …

学年(2024-2025-3) 学号(20241424)《计算机基础与程序设计》第三周学习总结

学期(2024-2025-3) 学号(20241424) 《计算机基础与程序设计》第三周学习总结 作业信息 |这个作业属于([2024-2025-3-计算机基础与程序设计](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03)| |-- |-- | |这个作业要求在(2024-2025-3计算机基础与程序设计第三周作…

mysql join语法解析

MySQL 支持以下 JOIN 语法用于 SELECT 语句和多表 DELETE 和 UPDATE 语句中的 table_references 部分: table_references: 查询中涉及的一个或多个表的引用,可以是简单表名或 JOIN 表达式的组合。 escaped_table_reference [, escaped_table_reference] ...escaped_table_ref…

Tableau修改行和列的颜色

1.修改颜色 1.1 在列上右键点击设置格式1.2 修改列和角2.逆时针、由里及外依次设置格式在直条上右键