例如 :
#include
using namespace std;
int fun(int a, char b, float c, int *d, char *e, bool f,int g)
{
return 1+2;
}
int main()
{
//定义一个函数指针,指向该函数
int (*p)(int , char , float , int *, char *, bool ,int ) = fun;
//auto修饰指针
auto p2 = fun;
return 0;
}
#include
using namespace std;
int fun(int a, char b, float c, int *d, char *e, bool f,int g)
{
return 1+2;
}
//创建一个函数模板
template <typename T>
int fun2(T a)
{
auto b = a;
cout << typeid (b).name() << endl;
}
int main()
{
//定义一个函数指针,指向该函数
int (*p)(int , char , float , int *, char *, bool ,int ) = fun;
//auto修饰指针
auto p2 = fun;
fun2(12);
fun2('2');
return 0;
}
当需要一个匿名的、临时的,可以捕获外界变量的函数时,可以用lambda表达式完成。
一般用在函数的实参
[](){} //lambda表达式
[捕获外界变量的方式](函数的形参列表)->return type{函数体内容}
[] :捕获外界变量的方式
1.[变量1,变量2] :值捕获,外界的变量和函数体内部捕获到的变量的值相同,
但地址不同,表示不同的变量,不可以对该变量进行修改操作,
如果想在函数体内修该变量的值,可以加上mutable
2.[=] :值捕获,对外界所有的变量进行值捕获
3.[&变量1, &变量2] :引用捕获(地址捕获),外界的变量和函数体内部捕获到的变量的值相同,
地址也相同,是同一个变量,可以对变量修改操作,可以不用mutable
4.[&] :引用捕获,对外界所有的变量进行引用捕获
5.[=,&变量1, &变量2] :
6.[变量1,变量2,&] :
() :函数的形参列表
-> 函数的返回类型
示例 :
#include
using namespace std;
int main()
{
int a = 100, b =200, c = 300;
cout << a << " main " << &a << endl;
//auto fun = [a,b]()mutable{
//auto fun = [=]()mutable{
//auto fun = [&a,&b](){
auto fun = [&](string name = "hello")->int{
cout << a << " fun " << &a << endl;
a = 200;
cout << a << " fun " << &a << endl;
cout << c << endl;
//return name; 指定返回类型,就不可以随意返回类型
};
cout << a << " main " << &a << endl;
cout << fun("hello kitty") << endl;
cout << a << " main " << &a << endl;
return 0;
}
以下是常见的数据类型转换方式:
int num_int = 10;
double num_double = num_int; // 隐式将int转换为double
double num_double = 3.14;
int num_int = static_cast<int>(num_double); // 显式将double转换为int
class Base {
virtual void foo() {}
};
class Derived : public Base {};
Base* base_ptr = new Derived;
Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr); // 显式将基类指针转换为派生类指针
const int a =10; //
int *p;
p = &a; // 合不合法? no
const int num_const = 5;
int* num_ptr = const_cast<int*>(&num_const); // 去除const限定符
int num = 42;
float* float_ptr = reinterpret_cast<float*>(&num); // 重新解释转换
int num_int = 10;
double num_double = (double)num_int; // C样式强制类型转换
int num_int = 10;
double num_double = double(num_int); // C++函数样式类型转换
需要注意的是,尽管C++提供了多种类型转换方式,
但应该谨慎使用,以避免潜在的错误和问题。
特别是在使用强制类型转换时,务必确保转换操作是安全的,以避免不必要的问题。
数据类型相关的关键字
语句相关的关键字
存储类型相关的关键字
static、const、volatile、register、extern、auto
构造数据类型相关
访问权限:public、protected、private
异常处理:throw、try、catch
类中相关使用关键字
类型转换相关的关键字
static_cast、dynamic_cast、const_cast、reinterpret_cast
模板相关的关键字:template、typename
命名空间相关:using、namespace
export:导入相关模板类使用
内存分配和回收:new、delete
函数原型:
vector< T > v; //无参构造
vector(const vector &v); //拷贝构造函数
vector(v.begin(), v.end()) ; //把区间[ v.begin(), v.end() )的数据拷贝给本对象
vector(n, elem); //把n个elem拷贝给本对象
示例 :
#include
#include //包含头文件vector
using namespace std;
void printVector(vector<int> &v) //算法
{
vector<int>::iterator iter; //迭代器
for(iter = v.begin(); iter != v.end(); iter++)
{
cout << *iter << " ";
}
cout << endl;
}
int main()
{
vector<int> v; //vector容器
v.push_back(10); //尾插
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50);
printVector(v);
vector<int> v1 = v; //v1(v)
printVector(v1);
vector<int> v2(v1.begin(), v1.end());
printVector(v2);
vector<int> v3(3,99);
printVector(v3);
return 0;
}
函数原型:
vector &operator=(vector &v); //拷贝赋值函数
assgin(v.begin(), v.end()); //把区间[ v.begin(), v.end() )的数据赋值给本对象
assgin(n, elem); //把n个elem赋值给本对象
示例 :
#include
#include //包含头文件vector
using namespace std;
void printVector(vector<int> &v) //算法
{
vector<int>::iterator iter; //迭代器
for(iter = v.begin(); iter != v.end(); iter++)
{
cout << *iter << " ";
}
cout << endl;
}
int main()
{
vector<int> v; //vector容器
v.push_back(10); //尾插
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50);
printVector(v);
vector<int> v1 = v; //v1(v)
printVector(v1);
vector<int> v2(v1.begin(), v1.end());
printVector(v2);
vector<int> v3(3,99);
printVector(v3);
v1 = v3;
printVector(v1);
v1.assign(v2.begin(), v2.end());
printVector(v1);
v1.assign(6,8);
printVector(v1);
return 0;
}
empty(); //判断是否为空
size(); //容器的大小,元素的个数
capacity(); //容量的大小
resize(); //重新设置大小
函数原型:
push_back(); //尾插
pop_back(); //尾删
insert(iterator pos, elem); //在迭代器所指向的位置,插入数据
insert(iterator pos, n, elem); //在迭代器所指向的位置,插入n个数据
erase(v.begin(), v.end()); //把这个区间的数据删除
clear(); //清空
示例 :
#include
#include //包含头文件vector
using namespace std;
void printVector(vector<int> &v) //算法
{
vector<int>::iterator iter; //迭代器
for(iter = v.begin(); iter != v.end(); iter++)
{ cout << *iter << " "; }
cout << endl;
}
int main()
{
vector<int> v; //vector容器
v.push_back(10); //尾插
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50);
printVector(v);
vector<int> v1 = v; //v1(v)
printVector(v1);
vector<int> v2(v1.begin(), v1.end());
printVector(v2);
vector<int> v3(3,99);
printVector(v3);
v1 = v3;
printVector(v1);
v1.assign(v2.begin(), v2.end());
printVector(v1);
v1.assign(6,8);
printVector(v1);
if(!v1.empty())
{
cout << v1.size() << endl;
cout << v1.capacity() << endl;
}
v1.resize(3);
printVector(v1);
v1.push_back(99);
printVector(v1);
v1.pop_back(); //尾删
printVector(v1);
printVector(v2);
v2.insert(v2.begin()+1,99);
printVector(v2);
v2.insert(v2.begin()+3,3,99);
printVector(v2);
v2.erase(v2.begin()+2);
printVector(v2);
cout << "=====================" << endl;
//v2.erase(v2.begin(),v2.end());
//printVector(v2);
v2.clear();
printVector(v2);
return 0;
}
函数原型
at(int idx); //下标为 idx 的元素
operator[](int idx);
front(); //第一个元素
back(); //最后一个元素
功能:将数据进行链式存储
链表(list) : 是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。
链表的组成 :链表由一系列节点组成
节点的组成 :一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域
STL中的链表是一个双向链循环链表
list的优点:
list缺点:
函数原型:
list lst; //无参构造函数
list(beg, end); //构造函数将[begin,end)区间中对的元素拷贝给本身
list(n, elem); //构造函数将n个elem拷贝给本身
list(const list& l); //拷贝构造函数
函数原型:
assign(beg, end); //将[beg,end)区间中的数据拷贝赋值给本身
assign(n, elem); //将n个elem拷贝赋值给本身
list& operator=(const list &lst); //重载赋值符
swap(lst); //将lst与本身的元素互换
函数原型:
size(); //返回容器中元素的个数
empty(); //判断容器是否为空
resize(num); //重新指定容器的长度为um,若容器变长,则以默认值填充新空间
//如果容器变短,则末尾超出容器长度的元素则被删除
resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新空间
//如果容器变短,则末尾超出容器的元素被删除。
函数原型:
push_back(); //尾部插入元素
pop_back(); //删除最后一个元素
push_front(elem); //在容器的开头插入一个元素
pop_front(); //在容器的开头删除一个元素
insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count, ele); //迭代器指向位置pos 插入count个元素ele
insert(pos,beg, end); //在pos位置插入[beg,end)区间的数据,无返回值。
erase(const_iterator pos); //删除迭代器指向的元素
erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素
clear(); //删除容器中所有的元素
remove(elem); //删除容器中所有与elem值匹配的元素。
函数原型:
front(); //返回第一个元素
back(); //返回最后一个元素
包含头文件
#include
创建流对象
ifstream ifs;
打开文件
ifs.open(“文件名路径” , 打开方式);
ios::in
读取数据
ifs >> 存放的变量
关闭文件
ifs.close();
#include
//1.包含头文件
#include
using namespace std;
int main()
{
//写入数据
//2.创建流对象
ofstream ofs;
//3.打开文件
ofs.open("C:/Users/admin/Desktop/stu.txt",ios::out);
//4.写入数据
ofs << "姓名:张三 ";
ofs << "年纪:18" << endl;
//5.关闭文件流
ofs.close();
//2.创建流对象
ifstream ifs;
//3.打开文件
ifs.open("C:/Users/admin/Desktop/stu.txt",ios::in);
//4.读取数据
char buff[1024];
while (ifs >> buff)
{
cout << buff << endl;
}
//5.关闭文件流
ifs.close();
return 0;
}