专栏文章

C++语法

科技·工程参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minj1j26
此快照首次捕获于
2025/12/02 03:13
3 个月前
此快照最后确认于
2025/12/02 03:13
3 个月前
查看原文

C++语法


构造函数和析构函数

自动在进入 / 离开作用域(全局则指程序开始 / 结束,局部指函数调用 / 返回)时调用。
C
struct flusher {
    flusher() { init(); }  //构造函数
    ~flusher() { flush(); }//析构函数
} auto_flusher;

template

template <typename T, typename... Args>可变参数模板的声明语法,用于定义可接受任意数量类型参数的模板。
Args是一个模板参数包,可以包含任意数量的类型参数。
使用 ...语法表示这是一个可变参数列表。
C
void ck_(){cerr<<"\n";}
template<typename T,typename ...R>
void ck_(T x,R... y){if(!deb)return;cerr<<x<<" ";ck_(y...);}

lambda 表达式

CPP
return_type [capture](parameters){
    // 函数体
}
  1. 捕获列表 [capture]:定义外部变量的访问方式
    []:不捕获任何变量。
    [=]:以值方式捕获所有外部变量。
    [&]:以引用方式捕获所有外部变量。
    [x]:以值方式捕获特定变量 x
    [&y]:以引用方式捕获特定变量 y
    [=, &z]:默认值捕获,但 z 以引用捕获。
    [&, a]:默认引用捕获,但 a 以值捕获。
  2. 参数列表 (parameters):与普通函数参数相同(可选)
C
auto add = [](int a, int b) {return a + b;};// 不捕捉外部变量,相当于普通函数
std::cout << add(3, 4); // 输出: 7
int counter = 0;
auto increment = [&](){ counter++; }; //修改外部变量

pbds::tree

C
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;// less<pii>:从小到大 // greater<pii>:从大到小
tree<pii,null_type,less<pii>,rb_tree_tag,tree_order_statistics_node_update>q;int cntq;
#define ins(x) (q.insert(mkp(x,++cntq)))//要求元素互不相同,使用 pair
int main()
{
	ins(7),ins(7),ins(9),ins(1);
    ck(q.order_of_key(mkp(7,1e9)));// 查询严格小于 (7,1e9) 的元素个数 // 3
	auto it=q.find_by_order(1);
	ck(it->fir);// 7
	q.erase(it);
	it=q.find_by_order(1);// 查询 (0开始) 第k小,此处为通常意义下的第2小
	ck(it->fir);// 7
	q.erase(it);
	it=q.find_by_order(1);
	ck(it->fir);// 9
	return 0;
}

unordered_map

可以进行 hash 重载,常数是 map 的一半。
C
struct Hash
{
	ull operator()(const vi &a)const 
	{
		ull v=0;
		for(int o:a)v=v*233+o;
		return v;
	}
};
unordered_map<vi,int,Hash>f;

评论

0 条评论,欢迎与作者交流。

正在加载评论...