复原IP地址 什么是运算符重载? 如何在 C++ 中进行运算符重载?运算符重载在面向对象编程中的好处是什么?getline方法

getline方法

getline 是一个强大的函数,主要用于从输入流中按行读取数据或基于自定义分隔符提取字符串。它是 C++ 标准库的一部分,定义在头文件 <string> 中。

语法

std::getline(istream& input, std::string& str);

input:输入流对象(如 std::cinstd::ifstream)。

str:用于存储提取结果的字符串。

std::getline(istream& input, std::string& str, char delimiter);

delimiter:分隔符,默认为换行符 \n。可以指定其他字符作为分隔符。

93. 复原 IP 地址

记录中间结果最好直接作为参数直接传进去,使用临时数组存储push和pop操作很消耗时间

class Solution {
public:vector<string> ans; // 存储最终结果vector<string> restoreIpAddresses(string s) {dfs(0, 0, "", s); // 从第 0 段和第 0 个字符开始回溯return ans;}void dfs(int depth, int start, string mid, string& s) {// 当分割成 4 段时,检查是否遍历完整个字符串if (depth == 4) {if (start == s.size()) { // 必须刚好遍历完整个字符串mid.pop_back();ans.push_back(mid); // 保存结果}return;}// 尝试分割长度为 1 到 3 的字符串for (int i = 1; i <= 3; i++) {if (start + i > s.size())return; // 提前退出无效分割string str = s.substr(start, i);// 检查前导零if (str.size() > 1 && str[0] == '0')return;// 检查是否在合法范围内if (i == 3 && str > "255")return;// 递归分割下一段dfs(depth + 1, start + i, mid + str+".",s);// 回溯,撤销本次选择}}
};

什么是运算符重载? 如何在 C++ 中进行运算符重载?

C++中允许重载运算符,使得非基本数据类型也可以实现自定义的运算操作

基本规则
        必须是类的成员函数或友元函数:
                成员函数的左操作数是类对象自身。
                友元函数可访问私有成员,但不能直接访问类外的对象。
        不能重载的运算符:
                ::(域运算符)、sizeof、.*、.(成员访问运算符)、typeid。
        重载不改变运算符的优先级和结合性。
        支持的运算符可以重载为一元或二元形式。

语法:

class MyClass {
public:MyClass operator+(const MyClass& other); // 重载 +
};
  • 返回值类型:通常是与类相关的类型。
  • 参数:取决于操作数的数量。
  • 使用 operator 关键字后跟运算符来定义。
  • 在类中重载运算符*this作为隐式参数传入,所以可以省略一个参数 在类在重载运算符时需要传递两个参数

特殊的流运算符重载

#include <iostream>
using namespace std;class Example {int value;
public:Example(int v) : value(v) {}friend ostream& operator<<(ostream& os, const Example& obj) {os << obj.value;return os;}
};

什么时候运算符重载的参数数量是可变的?

运算符重载的参数数量(固定或可变)影响其适用场景:

  • 固定数量:大部分运算符(如 +, -, [], = 等)参数数量固定,确保语义清晰。
  • 可变数量:函数调用运算符支持可变参数,增强了灵活性,可用于实现复杂逻辑(如仿函数或回调)。

函数调用运算符重载的作用:

用作泛型比较器:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;template <typename T>
class Compare {
public:bool operator()(T a, T b) {return a < b;}
};int main() {vector<int> vec = {5, 2, 9, 1};sort(vec.begin(), vec.end(), Compare<int>());for (int v : vec) {cout << v << " ";}return 0;
}

 泛型比较器的实现方法

运算符重载在面向对象编程中的好处是什么?

  • 提高代码可读性,例如流输出运算符重载,可以直接使用<<自定义输出,免得需要额外定义一个print函数
  • 支持自定义行为
  • 符合面向对象的封装性

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

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

相关文章

基于Springboot企业oa管理系统【附源码】

基于Springboot企业oa管理系统 效果如下&#xff1a; 系统主页面 用户管理页面 公告信息管理页面 客户关系管理页面 车辆信息管理页面 工资信息管理页面 文件信息管理页面 上班考勤管理页面 研究背景 随着信息化时代的到来和企业OA管理理念的更新&#xff0c;企业面临着日益…

学习记录:js算法(一百二十三):不同路径 II

文章目录 不同路径 II思路一 不同路径 II 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角&#xff08;即 grid[0][0]&#xff09;。机器人尝试移动到 右下角&#xff08;即 grid[m - 1][n - 1]&#xff09;。机器人每次只能向下或者向右移动一步。 网格中的障碍物…

[工具升级问题] 钉钉(linux版)升级带来的小麻烦

本文由Markdown语法编辑器编辑完成。 1. 背景: 今日钉钉又发布了新的升级版本。由于我工作时使用的是Ubuntu 20.04版本&#xff0c;收到的升级推送信息是&#xff0c;可以升级到最新的7.6.25-Release版本。根据钉钉官方给出的历次更新版说明&#xff0c;这个新的版本&#xf…

3.22SQL查询

实体完整性是数据库设计中的一个概念&#xff0c;指的是确保数据库中每个实体&#xff08;表&#xff09;在逻辑上是完整和一致的状态。它涉及到定义和强制执行一些规则和约束&#xff0c;以确保数据的完整性和准确性。 实体完整性通常通过以下方式来实现&#xff1a; 1. 主键…

y3编辑器教学5:触发器2 案例演示

文章目录 一、探索1.1 ECA1.1.1 ECA的定义1.1.2 使用触发器实现瞬间移动效果 1.2 变量1.2.1 什么是变量1.2.2 使用变量存储碎片收集数量并展现 1.3 if语句&#xff08;魔法效果挂接&#xff09;1.3.1 地形设置1.3.2 编写能量灌注逻辑1.3.3 编写能量灌注后&#xff0c;实现传送逻…

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 原模型 单图推理

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 原模型 单图推理 flyish 输入 输出 [‘这是一幅中国传统山水画&#xff0c;描绘了一座高耸的山峰&#xff0c;周围环绕着树木和植被。画面下方有一片开阔的田野&#xff0c;远处的山峦在薄雾中若隐若现。画面上方有几行书法…

LLM - 多模态大模型的开源评估工具 VLMEvalKit 部署与测试 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/144353087 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 VLMEva…

心觉:个人成长的密码,牛顿和量子力学已给出

Hi&#xff0c;我是心觉&#xff0c;带你用潜意识化解各种焦虑、内耗&#xff0c;建立无敌自信&#xff1b;教你财富精准显化的实操方法&#xff1b;关注我,伴你一路成长&#xff01; 每日一省写作258/1000天 在探索个人成长的奥秘时&#xff0c;你可曾想过&#xff0c;那些看似…

电子商务人工智能指南 5/6 - 丰富的产品数据

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…

JS进阶DAY3|事件(三)事件委托

目录 一、事件委托 1.1 概念 1.2 代码示例 二、tab栏切换案例 一、事件委托 1.1 概念 事件委托是一种在JavaScript中常用的技术&#xff0c;它利用了DOM事件冒泡的原理。事件冒泡是指当在DOM树中较低层次的元素上发生事件时&#xff0c;这个事件会向上冒泡到更高层次的元素…

Y3编辑器文档4:触发器1(对话、装备、特效、行为树、排行榜、不同步问题)

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 函数库与触发器复用 二、触发器的多层结构2.1 子触发器&#xff08;在游戏内对新的事件进行注册&#xff09;2.2 触发器变量作用域2.3 复合条件2.4 循环2.5 计时器2.6…

LoRA:低秩分解微调与代码

传统的微调&#xff0c;即微调全量参数&#xff0c;就是上面的公式&#xff0c;但是我们可以通过两个矩阵&#xff0c;来模拟这个全量的矩阵&#xff0c;如果原来的W是(N * N)维度&#xff0c;我们可以通过两个(N * R) 和 (R * N)的矩阵矩阵乘&#xff0c;来模拟微调的结果。 …

鸿蒙系统-前端0帧起手

鸿蒙系统-前端0帧起手 先search 一番 找到对应的入门文档1. 运行项目遇到问题 如下 &#xff08;手动设计npm 的 registry 运行 npm config set registry https://registry.npmjs.org/&#xff09;2.运行后不支持一些模拟器 配置一下&#xff08;如下图&#xff0c;运行成功&am…

Java面试之实现多线程(二)

此篇接上一篇Java面试之什么是多线程(一) Java多线程是Java语言中的一个重要特性&#xff0c;它可以实现并发处理、提高程序的性能和响应能力。开发者需要了解多线程的概念和机制&#xff0c;并采用合适的多线程编程模型和同步机制&#xff0c;以保证程序的正确性和稳定性。Jav…

酒店/电影推荐系统里面如何应用深度学习如CNN?

【1】酒店推荐系统里面如何应用CNN&#xff1f;具体过程是什么 在酒店推荐系统中应用卷积神经网络&#xff08;CNN&#xff09;并不是一个常见的选择&#xff0c;因为 CNN 主要用于处理具有空间结构的数据&#xff0c;如图像、音频和某些类型的序列数据。然而&#xff0c;在某…

三、nginx实现lnmp+discuz论坛

lnmp l&#xff1a;linux操作系统 n&#xff1a;nginx前端页面 m&#xff1a;mysql数据库&#xff0c;账号密码&#xff0c;数据库等等都保存在这个数据库里面 p&#xff1a;php——nginx擅长处理的是静态页面&#xff0c;页面登录账户&#xff0c;需要请求到数据库&#…

03篇--二值化与自适应二值化

二值化 定义 何为二值化&#xff1f;顾名思义&#xff0c;就是将图像中的像素值改为只有两种值&#xff0c;黑与白。此为二值化。 二值化操作的图像只能是灰度图&#xff0c;意思就是二值化也是一个二维数组&#xff0c;它与灰度图都属于单信道&#xff0c;仅能表示一种色调…

CV之UIGM之OmniGen:《OmniGen: Unified Image Generation》翻译与解读

CV之UIGM之OmniGen&#xff1a;《OmniGen: Unified Image Generation》翻译与解读 导读&#xff1a;这篇论文介绍了OmniGen&#xff0c;一个用于统一图像生成的扩散模型。 >> 背景痛点&#xff1a;目前的图像生成模型大多专注于特定任务&#xff0c;例如文本到图像生成。…

数据分析python小工具录入产品信息到Excel

在没有后台管理系统的时候&#xff0c;有时候为了方便起见&#xff0c;想提供一个输入框让运营人员直接输入&#xff0c;然后数据就会以数据库的形式存进数据库 效果图&#xff1a; 输入用户名 输入数据 输入信息后点击添加到表格&#xff0c;检查后方便批量保存到excel …

scala的泛型2

package test55 //隐式转换 //1.隐式函数 //2.隐式类 //3.隐式对象 //4.函数的隐式参数//泛型&#xff1a;类型参数化。 //Pair 约定一对数据 class Pair[T](var x:T, var y:T) //泛型的应用场景&#xff1a; //1.泛型函数 //2.泛型类 //3.泛型特质 object test2 {def main(arg…