Created
September 16, 2024 13:31
-
-
Save duangsuse/26b80c39e1d8f7549b9cf244d8de1ce4 to your computer and use it in GitHub Desktop.
UmbraString等数据结构话题
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> | |
#define let auto | |
#define inc(A,B,i) for(let i=A;i<=B;i++) | |
#define NO NULL | |
#define _(T,meth, ...) T##_##meth(__VA_ARGS__) | |
#define Col(...) typedef struct{__VA_ARGS__;} T; | |
#define T Str | |
Col(size_t n; char* buf) //C的类型本应默认为指针/胖指针,像kt那样对Int等类型免链接化。现在 Type* 快成为public那样的形式主义啦 | |
T _(Str,lit, size_t n) { //C既不学py建模对象树(至少你new啊!),宏递归也不在参数上进行,同项目导包靠.h,好写烂代码~ | |
return (Str) {n,(char*)malloc(n)}; | |
} | |
#define T_Link(E,T) struct T{E x; T* xs;}; | |
T_Link(int, Nums) //template<T> 允许类型推理,即一致化调用和返回处的<T>。可怜gcc/clang无论对宏还是模板的报错皆如内容农场,不具有可读性 | |
static_assert(sizeof(Str)==16,"胖宝宝不可爱"); | |
#define Str_(f,x,...) f(x.buf,x.n,__VA_ARGS__) | |
int main() { | |
//我们写一大堆调用,区区py b"abc".ljust(4,b'd') ,这就是定义式编程优越性。(BASI|)C 几级又怎样? 维护那些屎山让gpt去吧 | |
inc(5,7, n) { | |
let x=Str_lit(n); | |
memset(x.buf,'d',n); Str_(snprintf,x,"ab"); | |
x.buf[2]='c'; x.buf[n-1]='\0'; //str+1NUL 真是很蠢的"内存优化",不想兼容libc str*() | |
printf("%s%d\n", x.buf, memcmp(x.buf,"abcd",n)==0); | |
} | |
//在无std::vec时最简单的手写list。 a=[i for i in range(1,3)]; for i,x in enumerate(a): | |
Nums* xs=NO; | |
inc(1,2,i) { xs=new Nums{i,xs}; } | |
let i=0; | |
for(let z=xs;z!=NO;i++,z=z->xs) printf("[%d]=%d\n",i,z->x); | |
//qsort在C里是对>1项 双指针向内扫&swap,相遇即pivot-递归,mergesort(Timsort的主步骤)则对>2项先递归后min(pivot左,右)合并 | |
//快排可多线程,归并更容易用于无序局部 | |
} | |
/* | |
def qsort(arr): | |
if len(arr) <= 1: | |
return arr | |
else: | |
pivot = arr[0] | |
less = [x for x in arr[1:] if x <= pivot] | |
greater = [x for x in arr[1:] if x > pivot] | |
return qsort(less) + [pivot] + qsort(greater) | |
# Test the qsort function | |
arr = [4, 65, 2, -31, 0, 99, 2, 83, 782, 1] | |
sorted_arr = qsort(arr) | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment