getline方法
getline 是一个强大的函数,主要用于从输入流中按行读取数据或基于自定义分隔符提取字符串。它是 C++ 标准库的一部分,定义在头文件 <string> 中。
语法
std::getline(istream& input, std::string& str);
 
input:输入流对象(如 std::cin 或 std::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函数
 - 支持自定义行为
 - 符合面向对象的封装性
 



















