vector
获取最后一个元素
vector.back()
获取头尾迭代器
vector.begin()
vector.end()
String
元素访问
back()
front()
at()
修改
append() 后接string
push_back() 后接char
pop_back()
insert()
replace()
swap()
查找
find()
rfind()
substr()
Lamada
Lambda表达式的基本语法结构如下:
[capture list] (parameter list) specifiers exception -> type { function body }
-
[capture list]是捕获列表,用来控制访问该作用域内的变量。
-
(parameter list)是参数列表。
-
specifiers是限定符,选填,做一些限制。
-
exception是异常说明符,选填。
-
-> type是明确返回值类型,选填,函数体第一句就是return,这里可以不写;多句后return必须明确返回值类型。
-
{ function body }是表达式的函数体。
简单应用:
auto f = [](int x, int y){ return x + y; };
int result = f(10, 20); //result == 30
捕获列表
值捕获
int a = 10; b = 20, c = 30;
//将变量a和b以值捕获方式传入到表达式中
auto f1 = [a, b]{ return a + b; };
int result1 = f1(); //result1 == 30
//等号表示将作用域内所有变量以值捕获方式传入到表达式中
auto f2 = [=]{ return a + b + c; };
int result2 = f2(); //result2 == 60
引用捕获
int a = 10; b = 20, c = 30;
//将变量a和b以引用捕获方式传入到表达式中
auto f1 = [&a, &b]{ a++; b++; };
f1();
//a == 11 b == 21
//&表示将所有变量以引用捕获方式传入到表达式中
auto f2 = [&]{ a++; b++; c++; };
f2();
//a == 12 b == 22 c == 31
混合捕获
int a = 10; b = 20, c = 30;
//将变量a和b以值捕获方式传入到表达式中,将变量c以引用捕获方式传递到表达式中
auto f = [=,&c]{ c++; return a + b; };
int result = f(); //result == 30
//c == 31
限定符
mutable:将值捕获的变量编程可修改
int a = 10;
//未用mutable修饰
auto f1 = [a](){
a++; //报错
}
//使用mutable修饰
auto f2 = [a]() mutable {
a++; //成功
}
异常说明符
noexcept指明表达式不会抛出异常
//未用noexcept修饰
auto f1 = [](int x){
if(x == 0)
throw(0); //成功
return x;
}
//使用noexcept修饰
auto f2 = [](int x) noexcept {
if(x == 0)
throw(0); //报错
return x;
}