2022.12.9---标准模板库

本文介绍了如何手动实现栈和队列的数据结构。通过模板类的方式,实现了栈的基本操作如入栈、出栈、判断是否为空及获取栈顶元素等,并且实现了队列的基本操作如在队尾插入数据、从队头删除元素、判断是否为空及获取队首和队尾元素等。这些实现都考虑了异常处理机制。

手动实现封装栈,队列模板类

//模板栈
#include <iostream>
#include<stack>
#define N 20

using namespace std;

template<typename type>
class my_stack
{
private:
    type data[N];
    int last;
public:
    my_stack():last(0) {}       //无参构造
    bool empty(){return last==0?1:0;}   //判空
    void push(const type &val)      //入栈
    {
        if(last==N){
            throw string("stack full");     //异常处理机制,栈已满
        }
        last++;
        data[last]=val;
    }
    void pop()      //出栈
    {
        if(last){
            last--;
        }else{
            last=0;
        }
    }
    int size(){return last;}    //求栈大小
    type &top()     //返回栈顶元素
    {
        if(last){
            return data[last];
        }else{
            throw string("stack empty");       //异常处理机制,栈为空
        }
    }

};

int main()
{
    my_stack<int> s;        //s调用无参构造
    cout<<"s.empty:"<<s.empty()<<endl;  //判空
    for(int i=1;i<=10;i++)
    {
        try {
             s.push(i);          //往栈中写数据
        } catch (string e) {
            cout<<e<<endl;    //发出异常
        }
        try {
            cout<<s.top()<<" ";   //访问栈顶元素
        } catch (string e) {
            cout<<e<<endl;    //发出异常
        }

    }
    cout<<endl;
    cout<<"s.size:"<<s.size()<<endl;    //求栈大小
    cout<<"s.empty:"<<s.empty()<<endl;
    for(int i=1;i<=10;i++)
    {
        try {
            cout<<s.top()<<" ";
        } catch (string e) {
            cout<<e<<endl;
        }
        s.pop();        //移除栈顶元素
    }

    return 0;
}
//模板队列
#include <iostream>
#include<queue>
#define N 10

using namespace std;

template<typename type>

class my_queue
{
private:
    type data[N];
    int head;
    int tail;
public:
    my_queue():head(0),tail(0) {}       //无参构造
    bool empty(){return head==tail?1:0;}    //判空
    void push(const type &val)      //在队尾插入数据
    {
        if((tail+1)%N==head){
            throw string("queue full");
        }
        data[tail]=val;
        tail=(tail+1)%N;
    }
    void pop()      //从队头删除元素
    {
        if(head==tail){
            throw string("queue empty");
        }
        head=(head+1)%N;
    }
    int size(){return (tail-head+N)%N;}     //求队列大小
    type &front(){return data[head];}       //返回第一个元素
    type &back(){return data[tail-1];}       //返回最后一个元素
};

int main()
{
    my_queue<int> q;
    cout<<"q.empty:"<<q.empty()<<endl;
    for(int i=1;i<=10;i++)
    {
        try {
            q.push(i);
        } catch (string e) {
            cout<<e<<endl;
        }
    }
    cout<<"q.size:"<<q.size()<<endl;
    cout<<"q.front:"<<q.front()<<endl;
    cout<<"q.back:"<<q.back()<<endl;
    return 0;
}

感谢你的详细反馈! 你现在尝试了: ```html {{ parseTime(form.lastSupplyTime, &#39;{y}-{m}-{d} {h}:{i}:{s}&#39;) }} ``` 传入的是标准 ISO 格式字符串 `2022-12-05T00:00:00.000+08:00`,但页面依然不显示内容甚至导致组件无法渲染。 --- ### ✅ 问题定位 你已经排除了以下情况: - `form.lastSupplyTime` 不是 null; - 时间格式是合法的 ISO 字符串; - 没有使用 `new Date()` 包裹(说明直接传字符串); - 页面仍然空白或组件崩溃; 👉 **说明:`parseTime` 函数本身可能未被正确引入、定义缺失、逻辑异常或抛出静默错误。** --- ### ✅ 排查建议与解决方案 #### 🔹 1. **确认 `parseTime` 是否成功导入** 检查是否真正成功从 Element Plus 中导入了 `parseTime`: ```js import { parseTime } from "element-plus/es/components/time-select/src/utils.mjs" console.log(&#39;parseTime:&#39;, parseTime) // 看是否为 undefined ``` 如果输出 `undefined`,说明路径不对或模块未导出该函数。 ✅ 正确方式应为: ```js // Element Plus 的 utils 并不是默认导出所有方法,有些版本需要自己封装 ``` --- #### 🔹 2. **使用 Vue 自带的 `dayjs` 或 `date-fns` 替代方案** 如果你不能确保 `parseTime` 是否有效,推荐使用更通用的时间处理库: ##### 使用 [dayjs](https://day.js.org/) 安装: ```bash npm install dayjs ``` 在组件中使用: ```js import dayjs from &#39;dayjs&#39; export default { computed: { formatLastSupplyTime() { const timeStr = this.form.lastSupplyTime; return dayjs(timeStr).format(&#39;YYYY-MM-DD HH:mm:ss&#39;); } } } ``` 模板中: ```html <span>{{ formatLastSupplyTime }}</span> ``` --- #### 🔹 3. **自定义一个简单的 parseTime 函数** 如果你不想依赖第三方库,可以自己写一个简单的时间格式化函数: ```js function parseTime(timeStr, pattern) { const date = new Date(timeStr); if (isNaN(date.getTime())) return &#39;无效时间&#39;; const pad = (n) => n.toString().padStart(2, &#39;0&#39;); const year = date.getFullYear(); const month = pad(date.getMonth() + 1); // 月份从 0 开始 const day = pad(date.getDate()); const hour = pad(date.getHours()); const minute = pad(date.getMinutes()); const second = pad(date.getSeconds()); return pattern .replace("{y}", year) .replace("{m}", month) .replace("{d}", day) .replace("{h}", hour) .replace("{i}", minute) .replace("{s}", second); } // 挂载到 methods 或全局 ``` 然后在模板中使用: ```html {{ parseTime(form.lastSupplyTime, &#39;{y}-{m}-{d} {h}:{i}:{s}&#39;) }} ``` --- ### ✅ 总结 | 问题 | 原因 | 解决方案 | |------|------|----------| | `parseTime(...)` 页面不显示 | `parseTime` 未正确引入或内部异常 | 检查导入路径 / 改用 dayjs / 自定义格式化函数 | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值