什么是string_view std::string_view是C++ 17标准中新加入的类,正如其名,它提供一个字符串的视图,即可以通过这个类以各种方法“观测”字符串,但不允许修改字符串。由于它只读的特性,它并不真正持有这个字符串的拷贝,而是与相对应的字符串共享这一空间。即——构造时不发生字符串的复制。同时,你也可以自由的移动这个视图,移动视图并不会移动原定的字符串。 正因这些特性,当你不需要改变字符串时,应当抛弃原来使用的const string而采用新的string_view,这样可以避免多余的字符串拷贝。 构造 std::string_view允许通过C风格的字符串、字符串字面量、std::string或者其他的string_view进行构造。在构造的同时允许指定“大小”。 const char *cstr_pointer = "pointer"; char cstr_array[] = "array"; std::string stdstr = "std::string"; s 继续阅读 >>


娄泽豪 18/06/26 21:55:29
C++ 17标准已经发布了有一段时间了(甚至于后一个版本C++ 20也在路上了),最近终于得空(懒癌治愈),查阅了相关资料,简单上手一下。感觉到,一个是“现代”C++和C语言确实已经是天差地别,另一个就是标准库中的东西以及新语法确实更加方便我们编程了。虽然这些特性也许很长一段时间内都不一定用得上,然而学习一下总是好的,并且,体验一下“更现代”的C++的感觉也不错。 带初始化的选择语句 这个特性用于if和switch语句中,现在允许在这两个选择语句中声明并初始化一个变量,该变量在整个选择语句中都可用。这个特性显然有助于代码的清晰性,现在你可以这样写了: if (int fd = open("filename", O_RDWR | O_CREAT); fd == -1) { perror("something"); } else { // 可以继续在这里使用fd } switch (int op = getOp(); op) { case xxx: ... case 继续阅读 >>


娄泽豪 18/06/26 19:24:43
前言 小组2018年的免试题的五位出题人是:小组16级成员刘付杰、李猛、时宇辰、王良、娄泽豪。(此处应有掌声若干秒) 本人虽然参与了出题,但是我对其他关卡知之甚少,于是好奇的我在免试题上线了之后,与大家一起开始了破关之旅。以下以我作为第一视角所写而成的“免试题攻略”,若有错漏,还请多多包涵,与我在评论区进行交流。 第一关 目前微信推送中第一关的入口已经下线,想要挑战的同学可以点击这里的入口进行挑战。 打开本关的入口链接,首先我们看到了一大段英文,根据我们在线翻译级别的英语技术,大约意思是我们要不要继续下去: 第一直觉我们肯定选择【Yes!】,不过这一页还有别的信息吗?经过一番尝试,无论是叛逆的选择【No..】或者做其他操作,都没有其他有用的信息。于是我们选择【Yes!】进入第二个页面: 首先最引人瞩目的显然就是中间的看不清楚的字,还有下面“FUJIE”五个字母构成的目前看来意义不明的动画。中间看不清楚的字可以通过选择的方式选中复制出来看: 晓伴君王犹未起, 阻避钧衡过十年。 纳降 继续阅读 >>


娄泽豪 18/05/07 23:14:59
为什么写? 很好奇为什么这个东西有那么难吗?于是就花了点时间探索一下 若n未知或已知 使用写轮眼复制书上代码 顺便一说书上的代码十分的难看,好孩子们不要学。 #include<stdio.h> void main() { int i; long int f, f1=1, f2=1; printf("%10ld%10ld", f1, f2); for(i=3;i<=50;i++) { f=f1+f2; printf("%10ld", f); f2=f; } } 使用迭代 #include<stdio.h> long long fibonacci(unsigned int n) { long long rv[] = { 1, 1 }; for (int i = 2; i < n; i++) { rv[1] += 继续阅读 >>


娄泽豪 18/04/19 13:10:26
algorithm [C++ 11] std::all_of 原型: template <class InputIterator, class UnaryPredicate> bool all_of (InputIterator first, InputIterator last, UnaryPredicate pred); 功能: 指定上下界内是否都符合某条件 用例: #include<iostream> #include<algorithm> using namespace std; int main(int argc, char *argv[]) { int numbers[] = { 1, 3, 5, 7, 9, 11 }; if (all_of(begin(numbers), end(numbers), [](int i) { return i & 1; })) { 继续阅读 >>


娄泽豪 18/03/06 21:05:38
2月28日 新开这本日记,也为了督促自己下个学期多下些苦功。先要读完手边的《算法导论》和《C++ Primer》。 3月1日 摸鱼。 3月2日 摸鱼。 3月3日 摸鱼。 3月4日 hepangda啊hepangda!你怎么能如此堕落!先前订下的学习计划你都忘了吗?子曰:“吾日三省吾身。”不能再这样下去了! 3月5日 摸鱼。 3月6日 写博客挂自己 。 作者:hepangda 发表于 2018/03/06 16:58:23 原文链接 https://blog.csdn.net/hepangda/article/details/79460736 阅读:75 评论:1 查看评论 继续阅读 >>


娄泽豪 18/03/06 16:58:23
(本文已于2018-1-1更新) 使用时#include包含以下代码的头文件即可: // File: pstring.hpp #ifndef __HEADER__PSTRING_ #define __HEADER__PSTRING_ #include<stdexcept> #include<iostream> class pstring { private: // 任意迭代器类型 template<typename FN> struct any_iterator { private: char *p; public: any_iterator(): p(nullptr) {} any_iterator(char *p): p(p) {} char &operator*() { return *p; 继续阅读 >>


娄泽豪 17/12/27 21:30:15
明天CET4了,随便写点啥压压惊好了。 // File: heap_string.h #ifndef __HEADER__HEAP_STRING_H #define __HEADER__HEAP_STRING_H typedef struct hstring_t { char *data; int length; int size; } *hstring_t; hstring_t hs_create(); void hs_destory(hstring_t str); void hs_assign(hstring_t str, const char *st); void hs_resize(hstring_t str, int ref); const char *hs_get(hstring_t str); int hs_length(hstring_t str); const char hs_at(hstring_t str, int idx); const char hs 继续阅读 >>


娄泽豪 17/12/15 22:10:38
写点啥? 最近状态其实一直挺差的,有各种各样的破事,人很烦躁的说,希望早点能调整过来吧。这学期基本上不怎么更新博客了,一个是学的内容,语言向的多一些,直接写的话很像抄书,对自己的提升基本没有。我对自己的记性还是有点信心的,记忆方面一向不出什么大问题。其实也是自己暗地里开过很多想写的内容,不过都被懒癌战胜了,有点难过。决定还是找个小一点的东西写写,找找感觉。在群博看到了一篇博客,决定拿这个入口搞一下。 在这里:http://blog.csdn.net/sanjiye/article/details/78766542 说什么? 很多时候都有这样的情况:有若干个结构形状极其相似的函数,但是由于这些函数有那么些微小的差别,因而有的时候会考虑直接复制粘贴一份出来,修改那么一小点内容。类似这样的代码: int io_write_users() { FILE *fp = fopen(IO_FILE_USER, IO_MODE_WRITE); if (fp == NULL) { 继续阅读 >>


娄泽豪 17/12/11 20:37:31
Leetcode 1: Two Sum 问题描述 给定一个整数数组和一个目标数,返回两个下标,使数组中这两个下标所代表的数字之和等于目标数。 你可以认为每组输入有且仅有一个正解,除此之外,两个下标不应当相等。 例子: 给定一数组nums = [2, 7, 11, 15],目标数target = 9 因为nums[0] + nums[1] = 2 + 7 = 9 = target,所以最后返回[0, 1]。 解题思路 显然的,本题最直接明了的方式就是暴力循环两个数组,依次算出所有和,并判定它是否与目标数相等,可以写出: class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> ret { 0, 1 }; for (int i = 0; i < 继续阅读 >>


娄泽豪 17/12/04 22:47:03