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

news2024/12/13 13:03:28

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.coloradmin.cn/o/2258787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【蓝桥杯备战】Day 1

1.基础题目 LCR 018.验证回文串 给定一个字符串 s &#xff0c;验证 s 是否是 回文串 &#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。 本题中&#xff0c;将空字符串定义为有效的 回文串 。 示例 1: 输入: s "A man, a plan, a canal: Panama…

牛客网刷题 | BC126 小乐乐查找数字

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;从0至1-CSDN博客&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;C语言、C、数据结构、嵌入式、Linux&#x1f36d; &#x1f60e;本文内容&#x1f923;&#xff1a;&#x1f36d;BC1…

单元测试-FATAL ERROR in native method: processing of -javaagent failed

文章目录 前言单元测试-FATAL ERROR in native method: processing of -javaagent failed1. 报错信息2. 解决方案 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运…

使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南

目标检测技术作为计算机视觉领域的核心组件&#xff0c;在自动驾驶系统、智能监控、零售分析以及增强现实等应用中发挥着关键作用。本文将详细介绍PaliGemma2模型的微调流程&#xff0c;该模型通过整合SigLIP-So400m视觉编码器与Gemma 2系列的高级语言模型&#xff0c;专门针对…

uni-app 设置缓存过期时间【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

东方明珠生成式人工智能媒体融合创新平台荣获AI Cloud轻量云典型案例

近日&#xff0c;由全球数字经济大会组委会主办&#xff0c;中国信息通信研究院&#xff08;以下简称“信通院”&#xff09;、中国通信企业协会承办的2024全球数字经济大会云AI计算国际合作论坛在北京成功召开。会上隆重发布了2024年“AI Cloud助力大模型场景化和工程化落地”…

数据结构 ——树状存储的实现

数据结构 ——树状存储的实现 1、树的遍历 按层遍历&#xff1a;从树的根节点开始&#xff0c;逐层遍历树中的所有节点。这种遍历方式也称为广度优先遍历。 先序遍历&#xff08;前序遍历&#xff09;&#xff1a;先访问根节点&#xff0c;然后递归地先序遍历左子树&#xff…

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

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

Docker 安装 Jenkins:2.346.3

准备&#xff1a;已安装Docker&#xff0c;已配置服务器安全组规则 1581 1、拉取镜像 [rootTseng ~]# docker pull jenkins/jenkins:2.346.3 2.346.3: Pulling from jenkins/jenkins 001c52e26ad5: Pull complete 6b8dd635df38: Pull complete 2ba4c74fd680: Pull complet…

AWS re:Invent 发布新的数据库产品 Aurora DSQL; NineData SQL编程大赛开始; 腾讯云支持PostgreSQL 17

重要更新 1. AWS re:Invent 发布新的数据库产品 Aurora DSQL &#xff0c;提供了跨区域、强一致、多区域读写的能力&#xff0c;同时具备99.999%&#xff08;多区域部署&#xff09;的可用性&#xff0c;兼容PostgreSQL&#xff1b;同时发布的还有 DynamoDB 也提供类似的跨区域…

《孤岛惊魂4》无法启动提示缺少“msvcp100.dll”快速修复方法!

《孤岛惊魂4》缺少msvcp100.dll的解决之道 在探索《孤岛惊魂4》这款充满惊险与刺激的射击游戏时&#xff0c;玩家可能会遇到一些意外的障碍&#xff0c;其中之一便是“缺少msvcp100.dll”的错误提示。这个错误不仅让游戏无法正常启动&#xff0c;还可能让玩家对游戏的热情大打…

机器学习:监督学习、无监督学习

1. 引言 机器学习是一种人工智能领域的技术&#xff0c;它旨在让计算机通过学习数据和模式&#xff0c;而不是明确地进行编程来完成任务。 机器学习分为监督学习、无监督学习、半监督学习、强化学习 四种。 ​ 2. 监督学习 2.1 什么是监督学习 定义&#xff1a;根据已有的数…

反向代理-缓存篇

文章目录 强缓存一、Expires(http1.0 规范)二、cache-control(http1.1 出现的 header 信息)Cache-Control 的常用选项Cache-Control 常用选项的选择三、弊端协商缓存一、ETag二、If-None-Match三、Last-modified四、If-Modified-Since浏览器的三种刷新方式静态资源部署策略…

【leetcode100】反转链表

1、题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 2、初始思路 2.1 思路 # Definition for singly-linked list. # class ListNode: # …

1.网络知识-IP与子网掩码的关系及计算实例

IP与子网掩码 说实话&#xff0c;之前没有注意过&#xff0c;今天我打开自己的办公地电脑&#xff0c;看到我的网络配置如下&#xff1a; 我看到我的子网掩码是255.255.254.0&#xff0c;我就奇怪了&#xff0c;我经常见到的子网掩码都是255.255.255.0啊&#xff1f;难道公司配…

代发考试战报:12月8号通过HCIP-datacom数通两门考试

代发考试战报&#xff1a;12月8号通过HCIP-datacom数通两门考试&#xff0c;题库非常稳定&#xff0c;精修版题库&#xff0c;题库数量少&#xff0c;没有重复题&#xff0c;题库答案也很准确&#xff0c;排版也很清楚&#xff0c;看会就能考过&#xff0c;。#华为#HCIP#题库#考…

Autosar培训笔记整理<二>

目录 往期推荐 Autosar培训笔记整理&#xff1c;一&#xff1e; AUTOSAR 产品 AUTOSAR Classic Platform (CP): AUTOSAR Foundation: AUTOSAR Acceptance Tests (TC) AUTOSAR Methodology and Templates AUTOSAR Tools CP VS AP Autosar软件架构 Top view AUTOSAR基础…

Maven插件打包发布远程Docker镜像

dockerfile-maven-plugin插件的介绍 dockerfile-maven-plugin目前这款插件非常成熟&#xff0c;它集成了Maven和Docker&#xff0c;该插件的官方文档地址如下&#xff1a; 地址&#xff1a;https://github.com/spotify/dockerfile-maven 其他说明&#xff1a; dockerfile是用…

Maven(生命周期、POM、模块化、聚合、依赖管理)详解

Maven构建项目的生命周期 在Maven出现之前&#xff0c;项目构建的生命周期就已经存在&#xff0c;软件开发人员每天都在对项目进行清理&#xff0c;编译&#xff0c;测试&#xff0c;部署等工作&#xff0c;这个过程就是项目构建的生命周期。虽然大家都在不停的做构建工作&…

MATLAB四种逻辑运算

MATLAB中的四种逻辑运算包括逻辑与用&或 a n d 表示 ( 全为 1 时才为 1 &#xff0c;否则为 0 ) and表示(全为1时才为1&#xff0c;否则为0) and表示(全为1时才为1&#xff0c;否则为0)&#xff0c;逻辑或用|或 o r 表示 ( 有 1 就为 1 &#xff0c;都为 0 才为 0 ) or表示…