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...
共计 455 篇文章,57 页。
您是Zorch的第 个小伙伴
Hits