专栏文章
C++语法
科技·工程参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minj1j26
- 此快照首次捕获于
- 2025/12/02 03:13 3 个月前
- 此快照最后确认于
- 2025/12/02 03:13 3 个月前
C++语法
构造函数和析构函数
自动在进入 / 离开作用域(全局则指程序开始 / 结束,局部指函数调用 / 返回)时调用。
Cstruct 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 表达式
CPPreturn_type [capture](parameters){
// 函数体
}
-
捕获列表
[capture]:定义外部变量的访问方式[]:不捕获任何变量。[=]:以值方式捕获所有外部变量。[&]:以引用方式捕获所有外部变量。[x]:以值方式捕获特定变量x。[&y]:以引用方式捕获特定变量y。[=, &z]:默认值捕获,但z以引用捕获。[&, a]:默认引用捕获,但a以值捕获。 -
参数列表
(parameters):与普通函数参数相同(可选)
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 重载,常数是
Cmap 的一半。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 条评论,欢迎与作者交流。
正在加载评论...