制作待做清单页面
前言转载自:博客添加待办清单页 | 轻笑Chuckle (qcqx.cn)
效果预览
实现过程新建Blog\themes\butterfly\layout\includes\page\todolist.pug并添加下列代码
注意:请将下列代码第二行中的/img/todo.webp替换为你想要展现的图片路径
123456789101112131415161718192021222324252627282930313233#todolist-box .page-top-card(style='background-image: url(/img/todo.png);') .content-item-tips 想做清单 span.content-item-title ToDoList .content-bottom .tips 要做的事还有很多,想做的事源源不断 #todoli ...
实现文章点赞
前言转载自:网站添加点赞、踩功能 | 轻笑Chuckle (qcqx.cn)
效果预览
部署OrLike注册登录LeanCloud并创建应用->回到首页点击应用设置
点击应用凭证并保存AppID和AppKey的值
点击数据存储->结构化数据->创建Class,名称设置为OrLike,不用改其余配置
点击一键部署),将应用部署到Vercel,未注册Vercel请参考添加Twikoo实现博客在线评论由于Vercel域名被墙,需要修改Vercel域名,请参考添加Twikoo实现博客在线评论添加环境变量今天完全搞忘了这一步导致云函数一直报错500,蠢哭了~_~
打开刚刚部署的项目点击settings
点击Environment Variables并填入Key和Value,这里注意:Key填”APPID”和”APPKEY”
前端部署以butterfly主题框架为例:
修改themes\butterfly\layout\includes\post\re ...
for循环的新型遍历
c++遍历容器一般是这样的123std::vector<std::string> name = {"ljy", "wy", "wz", "dqy"};for (auto i = name.begin(); i != name.end(); i++) // 这里auto替换了std::vector<std::string>::iterator std::cout << *i << std::endl;
在c++11中我们可以简化成这样123std::vector<std::string> name = {"ljy", "wy", "wz", "dqy"};for (auto i : name) // 注意,这里auto替换的是std::string,即直接将容器中的每个元素赋给了i进行遍历 std::cout <& ...
auto用法
前言auto会根据赋给变量的初值自动填充变量类型,当变量类型很长的时候尤其好用
注意(1)使用auto必须要赋初值,且初值不能是模板或函数等不确定类型,因为需要根据初值判断变量类型
(2)使用auto同时定义几个变量要求这几个变量的初值类型相同
1auto a = 3, b = '3', c = "3"; // 这样不行,初值类型不同只能分开写
示例123std::vector<std::string> name = {"ljy", "wy", "wz", "dqy"};for (auto i = name.begin(); i != name.end(); i++) // 这里auto替换了std::vector<std::string>::iterator std::cout << *i << std::endl;
上述循环根据c++11标准也可以这样写123std::vector<s ...
为什么推荐用++i
前言1for (int i = 0; i < 10; ++i)
以前看别人这么写都不太在意,今天偶然瞥到有说++i比i++效率更高
运算符重载于是我去找了一下两种运算重载方法:
(1)i++1234567//后置++运算符重载 Num& operator ++(int n) // int n是为了与重载前置++区分开 { Num temp = *this; this->num++; return temp; }
(2) ++i123456//前置++运算符重载 test& operator ++() { this->num++; return *this; }
对比可以发现,++i比i++省略了一步储存原变量的过程