
C++
wiiin@UTK-4000U
这个作者很懒,什么都没留下…
展开
-
set unordered_set map unordered_map 存储自定义类型
set 、map底层是红黑树,需要显性提供排序规则:set 使用lambda表达式auto fn = [](Node x,Node y)->decltype(bool()) { return x.a+x.b>y.a+y.b; }; set<Node,decltype(fn)> s(fn); s.insert(Node({1,2})); ``` set 重载类型< ``` struct Node{原创 2021-07-01 22:46:01 · 311 阅读 · 0 评论 -
C++关联式容器(底部红黑树),第二模板参数自定义
以set举例默认情况下set<int> a;1. 标准库提供 然后进行插入删除操作,默认使用less进行比较,即升序 set<int,less<int>> a;//与默认情况下等价 改为降序可以用另一个默认的函数,g什么(大于的英语)的代替less<int>2.若使用自定义的函数 2.1不使用lambda,传入自定义函数 int cmp1(int a,int b){return a>b};//降序 set<int,int(*)原创 2021-06-20 17:34:34 · 138 阅读 · 0 评论 -
C++ 11侯捷 模板模板使用的注意
侯捷在课程中提到,在不使用匿名模板情况下,向通过XCLs<int,vector> b;XCLs<string,list> l;XCLs<double,deque> d;这样形式去调用一个同一个模板函数或者模板类。在不使用匿名模板情况下侯捷老师通过修改调用端的方式:XCLs<vector<int>> b;XCLs<list<string>> l;XCLs<deque<double>>原创 2021-06-20 14:18:39 · 135 阅读 · 0 评论 -
C++ 自定义函数adaptable条件
使用bind1st/ bind2nd作为例子:在C++ 11之后,可以使用bind(),绑定:函数,仿函数,成员函数,成员变量绑定函数、仿函数,如:bind(func,first_arg,sec_arg,...)参数个数取决func参数个数,bind返回一个对象,或者可以使用占位符,在命名空间placeholders中,暂不绑定参数,在返回对象后 对象(, , , )传入占位符内的参数,顺序有关。在绑定成员函数或者变量,_1一定为对象地址,bind第一个参数为 class_name::func_nam原创 2021-06-19 09:03:04 · 123 阅读 · 0 评论 -
epoll边缘触发下客户端connect问题
epoll模型Linux会维护一个建立连接的队列,当服务器第二次收到syn后,会将该连接放在建立连接的队列。调用一次accpet会从该队列中取出一个连接用fd标识。边缘触发下,多个连接在epoll_wait之前完成三次握手,边缘触发仅仅产生一次,若调用一次accpet则队列内仍有连接未取出,无法完成数据传输。建议:监听套接字在epoll下使用电平触发...原创 2021-06-07 20:56:26 · 413 阅读 · 0 评论 -
STL不使用默认的分配器
使用其他分配器,可扩展使用自定义分配器1.找到编译器提供的文件一般在ext/分配器名字本机在include/ext/pool_allocator下2.引入该文件3.引用__gnu_cxx命名空间4.__gnu_cxx::__pool_alloc 线程池管理的分配器...原创 2021-06-04 16:53:08 · 132 阅读 · 0 评论 -
Linux系统编程wait函数如何在C++中使用
linux中的wait在C++中使用linux中的wait函数接口是对于在C语言中而言,该函数在man中声明:pid_t wait(int*status);在man文档中,推荐下述使用方式:int status;pid_t wpid;wpid = wait(&status);if(WIFEXITED(status)) printf("%d",WEXITSTATUS(status));else if(WIFSIGNALED(status)) printf("%d",WTERM原创 2021-05-09 12:34:34 · 528 阅读 · 0 评论 -
C++ 运用虚指针访问虚函数表,并使用函数指针调用虚函数,可以任意访问虚函数!!!!!!撸了两天!!!!!,附代码
通过虚指针访问虚函数表并且调用虚函数表内函数实现多态。多态的实现就是通过虚函数表和继承来实现一、多态的实现现在有两个类1.父类如下class base{public: virtual void P() { cout<<"PPPPP of base"<<endl; } virtual void P1() { cout<<"PPPPPP111111 of base"<<endl原创 2021-05-07 16:09:12 · 836 阅读 · 1 评论 -
C++ inline修饰成员函数,导致无法解析函数
解决:将实现与声明放在一个文件内,可以这么说:在.h中完成实现多处个地方写出实现函数,比如在main.cpp中加入 inline xxx::xxx(…){…} //构造函数举例原因:inline是一种建议修饰,编译器若采纳,之后在相应地方进行内联展开容易出现找不到实现函数。多处定义是为了方便在本文件内使用该函数时候,编译器能够链接到相应的函数。补充:内联修饰:类内实现,默认是隐式的内联修饰类内显示声明inline ,类外实现类外显示实现可以将所有函数写成inline,由编原创 2021-04-29 10:44:48 · 371 阅读 · 0 评论 -
C++复合类 自定义初始化
有两个类//**类 A**class A{public: A() {} //默认构造 A(const char* str){}//自定义构造};// **类 B**class B{protected: A a;}默认情况 a会调用A的默认构造函数进行初始化,若想使用A中自定义的初始化函数,则:在B中class B{protected: A a;public: B():a("自定义字符串"){}//在B的参数列表中为A指定构造函数};此时构造B b;原创 2021-04-29 10:01:03 · 229 阅读 · 0 评论 -
C++模板类声明、实现分离导致的无法解析外部函数
C++模板类声明、实现分离导致的无法解析外部函数1.代码—>运行,通过预处理、编译(c++文件 >> 汇编文件 >> 二进制文件)和链接生成可执行程序。2.模板函数/类在编译时候进行处理,模板函数/类会被编译两次。第一次仅仅对模板本身进行编译;第二次发生在调用时候,就是说如果不被调用就不会发生第二次编译。3.编译的独立性,每个不同的文件会独立进行编译(头文件不参与)。4.经过编译的文件被链接后则会生成可执行程序,链接过程中主要解决下面问题:本文件中使用其他文件中的函数或原创 2021-04-25 12:13:27 · 310 阅读 · 0 评论