![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
Coder_Penguin
这个作者很懒,什么都没留下…
展开
-
容器的线程安全性
容器的线程安全性原创 2023-03-01 14:30:17 · 927 阅读 · 1 评论 -
智能指针【auto_ptr与unique_ptr】
为什么弃用auto_ptr,unique做了啥原创 2022-10-08 20:43:03 · 302 阅读 · 0 评论 -
Eigen最经典的操作
1、声明与赋值1.1、声明1.1.1、在编译期不确定矩阵(向量)大小,如下 MatrixXd mat; Matrix<double, Dynamic, Dynamic> mat; //typedef Matrix<double, Dynamic, Dynamic> MatrixXd; VectorXd v;1.1.2、在编译期确定矩阵(向量)大小 MatrixXd mat(2,4); Matrix<double, 2, 4> mat;原创 2022-02-13 23:57:53 · 841 阅读 · 1 评论 -
简洁的Makefile总结
1.Make的含义是制作,因此输入make就是为了制作某个文件,比如说我想制作a.out这个文件,那么很简单直接输入make a.out显而易见,仅仅是输入这条语句是不会有任何作用的,因为make并不知道如何去制作a.out,需要有人提供给它制作的规则,而这样的规则就卸载Makefile这个文件中2.通常写完Makefile后我们会在bash上输入make然后就会执行相应的规则去制作文件,make会默认寻找第一个目标去创建,因此我们要把最后的目标放在第一个的位置,这样它就会为了生成这个最后的目标去检原创 2021-10-10 15:58:17 · 328 阅读 · 0 评论 -
Windows下Ceres库的配置 包含四个依赖库Eigen、gflags、glad、suitesparse-metis-for-windows的配置
一、首先Windows下Ceres库的配置过程中Eigen、gflags、glad是必须的,suitesparse虽不是必须但非常影响性能故也可以说是必须的。二、整个配置过程主要参考这一博客博主猪蹄97关于ceres库的配置,侵删,故读者在读到本博客时可以结合这篇博文,并以链接中的博文为主,本篇博文为辅,希望能帮到您三、本篇博文的定位是做一些补充并解决几点配置过程中的问题1.首先如无必须更改的原因。建议就按以下的版本进行配置:Eigen3.3.8、gflags2.2.2、glad0.4.0、suite原创 2021-10-09 18:27:24 · 894 阅读 · 0 评论 -
STL源码中List类大小变化
1.首先所有的STL容器都遵循前闭后开的特性,List也不例外,因此List的设计中一直会有一个空的结点。2.在GNU2.9中List只有一个成员变量,是指向结点的指针,因此类的大小为4;而在GNU4.9中List的大小为8因为此时的成员变量存储了两个指针,这两个指针是空结点的前向和后向指针。...原创 2021-08-20 16:57:07 · 157 阅读 · 0 评论 -
为什么STL中的list容器有属于自己的排序(sort)函数?
1.整个STL设计的指导思想是GP,即模板编程。在此思想的指导下,少了面向象编程的类继承、虚函数、多态等的设计,取而代之的是数据与方法的分离,表现在STL中将容器与算法分离,两者分别闭门造车,中间依靠迭代器联系。2.故sort算法被单独剥离出来,与所有的容器分开。虽然想的挺好但是总有例外,list容器就是那个例外。从源码可以看出,sort函数用到的迭代器的操作链表是不可能做到的,故list需要设计自己的sort函数。...原创 2021-08-16 13:36:29 · 826 阅读 · 0 评论 -
c++ 知识点小结
1.委托构造函数允许使用类中的某一构造函数调用同类中的其它构造函数。#include <iostream>using namespace std;class Test{public: Test() {}; Test(int max) { this->m_max = max > 0 ? max : 100; } Test(int max, int min):Test(max) { this-&原创 2021-07-24 17:45:20 · 142 阅读 · 0 评论 -
c++:返回类型后置语法
返回类型后置语法:作用:在并不关心函数的返回值时使用。用法:auto和decltype结合使用得到返回类型。例子:如图所示, 我们并不需要关心foo_func函数的返回类型,直接进行推导即可。#include <iostream>int& foo(int i){ return i;}float foo(float& i){ return i + 0.1;}template<typename T> auto foo_func(T& t原创 2021-06-15 22:50:56 · 211 阅读 · 0 评论 -
c++11:decltype
1.首先针对decltype有两种表达方法,分别是不带括号的和带括号的。2.其次,对于这两种表达方式的区别体现在变量上:只要是带了括号就取被推断变量的引用,不带括号就直接取被推断变量定义时的类型3.另外,如果被推断的是函数调用,则无论是带括号还是不带括号得到的都是函数的返回类型。4.最后,如果被推断的是运算表达式,如果表达式得到的右值,则无论是带括号还是不带括号得到的都是被推断的类型;如果表达式得到的左值,则无论是带括号还是不带括号得到的都是被推断的引用。具体的,2,3,4条对应的代码如下:在这原创 2021-06-08 16:06:44 · 271 阅读 · 0 评论 -
成员变量的初始化,easy
1.静态常量数据成员可以在类内初始化,即类内声明的同时初始化,也可以在类外,不能在构造函数中初始化,也不能在构造函数的初始化列表中初始化2.静态非常量数据成员只能在类外也不能在构造函数中初始化,不能在构造函数的初始化列表中初始化;3.非静态的常量数据成员可以在类内初始化和初始化列表中初始化,不能在构造函数中初始化4、非静态的非常量数据成员随便初始化以上基于c++11及以上...原创 2021-06-01 21:43:50 · 140 阅读 · 0 评论 -
C++ 多线程(4) 信号量、async、future_status、shared_future、packaged_task、promise
1.首先信号量是与互斥量配合使用的,使用wait()可以放弃锁,等待其它线程唤醒后(使用notify_all()或者notify_one())再继续获得锁。当然wait()函数是可以有第二个参数的,第二个参数可以是任何的可执行对象,这样被唤醒后不会直接参与锁的竞争而是先去检查第二个参数是否返回true,如果返回false则会继续等待,只不过此时的等待是在醒着的状态下。2.等待可以使用另一个函数wait_for(),可以可以在wait的基础上多加一个参数即时间,如果直到时间截止都没有被唤醒或者唤醒后可执行对原创 2021-05-22 15:19:48 · 237 阅读 · 0 评论 -
C++ 多线程(3):单例类 双重锁定
1.c++实现单例类,几点说明:(1)通过私有化构造函数使你不能自由创建对象(2)只能通过GetInstance得到一个实例(对象)(3)而且可以看出只要创建了第一次以后再调用此方法就返回第一次创建的对象的指针,故曰:单例类(4)通过类中类来析构创建的对象,不能直接用Model类的析构函数来析构(5)其中也利用了静态变量的生存周期是整个源程序这一点,静态私有成员变量与静态公共成员变量的区别跟静态没关系就是私有与公共的区别。在私有下,静态成员变量即不能通过类直接访问也不能通过对象直接访问class原创 2021-05-18 09:25:35 · 646 阅读 · 1 评论 -
c++ 多线程(2):共享数据的保护lock_guard、unique_lock
主要针对多个线程之间共享数据展开的一些讨论:1.多个线程之间针对共享数据进行读或者写,需要通过信号量进行加锁进行操作。即lock(),unlock()2.这一对操作跟指针的使用有着某种异曲同工之妙,因此诞生了一个lock_guard()的类模板,可以帮你自动管理unlock(),查看源代码如图:(1)与智能指针一样,这个lock_guard 就是个类,然后在你用std::mutex变量作为参数进行构造时就会自动调用这个变量的lock()(2)之后在析构时就会自动调用unlock()(3)可以看出你原创 2021-05-16 18:32:34 · 473 阅读 · 0 评论 -
c++ 多线程(1)
1.如果使用detach,thread函数就不要用指针传递!尤其注意字符串char数组2.如果使用detach,如果要传递对象,不要使用隐式转换,使用隐式转换时构造和拷贝啥的都会在子thread进行,如果主thread退出还没开始转换很危险!要在传入参数进线程时就构造好再传进去。3.故用个屁的detach,就用join4.传递对象时即使thread函数的形参是可以接收引用的,直接将一个对象传入也会发生拷贝构造,故这就不是真正的引用了。5.要想真正的传递引用就要在传入时使用std::ref()这样传入原创 2021-05-15 15:26:49 · 80 阅读 · 0 评论 -
关于类的成员函数到底是一种怎样的存在?
1.首先对于静态成员函数不做讨论,众所周知是属于类的2.所有的成员函数在类编译时就创建好了,故它们是存在对象空间之外的地方。故创建对象时只是创建属于这个对象的成员变量而没有成员函数。如果成员函数的参数没用到成员变量的话,不管此成员函数是不是static的,都能正常工作。3.非静态成员函数是属于对象的。4.如下图代码所示,会执行printA(),但是不会执行printB(),因为是在构造函数中进行虚表的创建和虚表指针的初始化。故这里没有执行构造函数自然找不到虚函数指针指向的位置。class D{p原创 2021-05-15 14:48:43 · 321 阅读 · 0 评论 -
什么鬼,1005不会!
#include<iostream>using namespace std;int ans[52];int main(){ int i,a,b,n,cicle,start,j; while(cin>>a>>b>>n&&!(a==0&&b==0&&n==0)) { ans[1]=1,ans[2]=1;ans[51]=-1; for(i=3;i<=原创 2021-03-21 13:21:40 · 56 阅读 · 0 评论 -
并查集的应用!
并查集决定了它的应用是:对并查集而言,应用就是判断无向图的连通分量个数,或者判断无向图中任何两个顶点是否连通。例题:畅通工程题目描述:某省调查城镇交通状况,得到现有城镇道路统计表表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通但不一定有直接的道路相连,只要互相间接通过道路可达即可问最少还需要建设多少条道路?输入:测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的原创 2021-03-19 16:53:01 · 844 阅读 · 0 评论 -
优先队列与哈夫曼树的求解
很多时候用到哈夫曼树不会去真正的构建一棵哈夫曼树,而仅仅是为了求得那个最小带权路径长度,这时用优先队列即可满足要求。#include<bits/stdc++.h>using namespace std;typedef long long int ll;int main(){ priority_queue<ll,vector<ll>,greater<ll> > p; int i,n; ll data,ans = 0; c原创 2021-03-19 11:15:19 · 132 阅读 · 0 评论 -
CCF历年第三题总结,更新ing
1.201909-3 字符画原创 2021-03-12 12:21:17 · 293 阅读 · 0 评论 -
201909-3 字符画
#include <bits/stdc++.h>#define fixed_out1 outStr(string(1,char(27))+"[0m")#define fixed_out2 outStr(string(1,char(27))+"[48;2;"),outPixel(R),outChar(';'),outPixel(G),outChar(';'),outPixel(B),outChar('m')using namespace std;int getPixel(char a,ch原创 2021-03-12 12:20:00 · 173 阅读 · 0 评论 -
c++提纲挈领之冰山一角,持续更新!
1.unsigned char与char的使用只要注意当把这个字符赋值给int或longlongint时即可,当有这种赋值需求时就要用unsigned char了因为不会把最高位当作符号为处理,否则用char会出错!2.输出十六进制时的技巧cout<<"\x"<<hex<<uppercase<<setw(2)<<(int)c;如这句话所示,uppercase只会用在这种场合,用于16进制输出时的字母会大写。3....原创 2021-03-12 12:10:46 · 84 阅读 · 0 评论