Re: [问题] Reverse String with recursively

楼主: poyenc (发箍)   2019-03-12 03:46:33
※ 引述《IhateOGC (我讨厌)》之铭言:
: 开发平台(Platform): (Ex: Win10, Linux, ...)
: 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
: 额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
: http://tinyurl.com/y4hq4vfg
: 错误结果(Wrong Output):i
: Stdout:
: runtime error: reference binding to null pointer of type 'struct value_type'
: (stl_vector.h) - leet code spiral
: 程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
: void reverseString(vector<char>& s) {
: static int i = 0 ;
: static char *p = nullptr;
: if( &s[0] != p )
: {
: p = &s[0];
: i = 0;
: cout << "init i " << endl;
: }
: cout << "i1 = " << i << endl;
: if( i >= (s.size()/2) )
: return;
: cout << "i2 = " << i << endl;
: swap( s[i] , s[s.size()-1-i]);
: i++;
: reverseString(s);
: }
: 补充说明(Supplement):
: 我的i怎不会跑...
你的程式码虽然有递回呼叫但不像经过递回思考写出来的 xD
递回呼叫不只可以帮助缩小操作范围, 也可以重新定义问题大小.
如果问题大小拆分得好, 函式里就不会有和原输入资料相关的逻辑
, 像是 &s[0], s.size() 等..
刚好标准函式库里的 std::span 可以帮我们改善这个问题, 因为是
很小的类别, 你可以自己实作或把 span-lite 源码直接复制来用
cppreference https://bit.ly/2Hrjlro
span-lite https://bit.ly/2TGRABr
这题用到的成员函式为:
front(), back(), subspan(), size()
实作需要的工不多, 却可以大幅提升可读性. 而且 base case 处理
好的话连除错都不需要, 这也是递回带来的好处
example https://bit.ly/2XNNRRU
作者: IhateOGC (我讨厌)   2019-03-12 08:46:00
:) 感谢
作者: ilikekotomi (Young)   2019-03-12 20:06:00
感谢分享 之前没注意过span
作者: LPH66 (-6.2598534e+18f)   2019-03-12 20:17:00
cppreference 里可以看到 span 是 C++20 的新东西
作者: TitanEric (泰坦)   2019-03-13 01:06:00
感谢大大分享 原来有span可以用
作者: mmmmei (mmm煤)   2019-03-13 12:05:00
请问一下span跟其他container比起来有什么特点吗谢谢解释 非常清楚
作者: IhateOGC (我讨厌)   2019-03-14 09:56:00
太神了!!

Links booklink

Contact Us: admin [ a t ] ucptt.com