主页

C++lambda一些有用的操作总结

写在前面 lambda 简介 这里我最喜欢的一个功能就是参数捕获列表, 可以很大程度上减少参数的重复传递, 一个 & 足矣(当然也不能滥用) 参数捕获 常见操作 指定比较规则(sort, priority_queue) 指定其他规则 简短函数的封装 递归支持 用递归版本的 lambda 主要是方便参数的捕获. 试想回溯法中参数一多了, 写成独立的两个函数就要传入很多并不是递归变量的变量, 没有必要, 不过写递归lambda 的坏处就是不如两个函数那样简洁明了. 这里有两种比较常见的方法, 第一种就是每次刷题都用的function类模板(函数对象) 下面的例子是经典的反转链表递归写法(复习一下) function<ListN...

阅读更多

并查集相关题目总结

并查集相关题目 简介 并查集(Union-Find-Set, UFS) 主要有两个功能: 将两个元素合并到一个集合中 判断两个元素在不在一个集合中 模板 路径压缩 // init int fa[N]; for (int i{}; i < N; ++i) fa[i] = i; // Find function<int(int)> Find = [&](int u) { return u == fa[u] ? u : fa[u] = Find(fa[u]); }; // check auto isSame = [&](int u, int v) { return Find(u) == Find(v); }; // jo...

阅读更多

Golang导入本地包,模块的方法总结

写在前面 来总结一下 GoLang 中使用本地包的操作. environment: ==> go version go version go1.20.4 darwin/arm64 go mod 是 go 1.11 (大约 2018 年 之后)开始支持的 本地包的导入可以分成两个情况, 即: 要导入的包存在于在本项目的目录下, 直接导入. 要导入的包存在于其他目录下, 使用 replace 命令导入. 代码可以在这里找到: GoLang中使用本地包的操作; 在本项目目录下导入 这里以在 ./pkg0/main.go 中导入内部目录 ./pkg0/kpkg/ 中的 kpkg 模块为例, 首先需要填写内部模块(kpkg)的go.mo...

阅读更多

素数相关力扣题目总结

写在前面 基本问题 技巧 这类题需要预处理, 将处理好的素数数组作为全局变量, 可以节省一大部分时间. 全局变量初始化的便捷方法可以用 lambda, 算是一个不错的技巧了(在 C++中 main 函数之前执行的函数也用到了这一技巧), 即: // global variable declare here int _ = []{ // golbal variable need not capture in lambda // init something... return 0; }(); 这里给出预处理某一范围内的素数的通用模板: (欧拉筛法, 又称线性筛法) constexpr int MX = 1e6; int primes[MX], cnt{};...

阅读更多

C++类内弹性数组的使用技巧

class P { public: int x; int array_[1]; // Must be declared at the end of the class }; 这里就体现了使用 new 和 malloc 的一个不同, 即 new 不能指定所分配的具体内存大小, 只能让编译器根据对象所占内存的大小来推断(计算), 如果非要指定(并且不是通过 array-new 的方式)那就要用 placement-new 方法. 代码如下: void t1() { cout << "sizeof(P)=" << sizeof(P) << endl; // 8 // 24=4+5*4, array_.size=5 ...

阅读更多

Clang和 gnu++的区别

默认初始值 #include <bits/stdc++.h> using namespace std; void f(int* x) { cout << x << endl; cout << *x << endl; cout << *(x + 1) << endl; } int main(int argc, char* argv[]) { // int x[0]{}; #ifdef __clang__ // clang cout << "clang++:\n"; f(x); #endif // clang++: // 0x1...

阅读更多

Golang学习笔记_方法

写在前面 练习, Stringer Go 语言之旅; package main import "fmt" type IPAddr [4]byte // TODO: 给 IPAddr 添加一个 "String() string" 方法 func (ip IPAddr) String() string { return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]) } func main() { hosts := map[string]IPAddr{ "loopback": {127, 0, 0, 1}, "googleDNS": {8, 8, 8, 8}, } for name, ip...

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits