草庐IT

高效化

全部标签

c++ - 使用 POD 高效移动类(class)

如何有效地移动具有大量POD成员的类(class)?示例:struct{inta1;inta2;inta3;.........};“移动”是指行为类似于移动语义(std::move)。 最佳答案 POD不会移动,它们只会复制。因为没有间接性。因此,只需使用普通赋值,并要求编译器针对您想要的任何效率进行优化。记住要系统地衡量之前(你到底做了什么不同的事情)和之后。还要考虑浪费的程序员时间(即金钱)是否值得进行微优化。 关于c++-使用POD高效移动类(class),我们在StackOver

c++ - Eigen :高效克罗内克积

我正在将Eigen用于我正在进行的项目,其中运行时性能绝对至关重要(需要满足实时约束)。到目前为止,Eigen为我提供了相当不错的性能。但是,我需要评估Kronecker产品。我正在使用Eigen不受支持的KroneckerProduct模块,但我认为它不能满足我的需求。我用来计算Kronecker乘积的两个矩阵具有固定大小(在编译时已知)和结构。一个矩阵是正方形和对角线,我们假设它是一个单位矩阵。另一个是小方阵。在代码中,像这样:MatrixXfI=MatrixXf::Identity(4,4);MatrixXfX=MatrixXf::Random(8,8);MatrixXfP=kr

switch-statement - 高效开关需要自认证吗?

显然,when表达式的编译方式取决于一个表示常量的方式:objectSwitchOverConstants{valfoo=1valbar=2valbaz=3funone(x:Int)=when(x){foo->"foo"bar->"bar"baz->"baz"else->"else"}funtwo(x:Int)=when(x){SwitchOverConstants.foo->"foo"SwitchOverConstants.bar->"bar"SwitchOverConstants.baz->"baz"else->"else"}}这是one的字节码:0:iload_11:istore

switch-statement - 高效开关需要自认证吗?

显然,when表达式的编译方式取决于一个表示常量的方式:objectSwitchOverConstants{valfoo=1valbar=2valbaz=3funone(x:Int)=when(x){foo->"foo"bar->"bar"baz->"baz"else->"else"}funtwo(x:Int)=when(x){SwitchOverConstants.foo->"foo"SwitchOverConstants.bar->"bar"SwitchOverConstants.baz->"baz"else->"else"}}这是one的字节码:0:iload_11:istore

c++ - 非虚拟接口(interface)? (需要非常高效的低级抽象)

我正在尝试在应用程序架构中非常低的水平点微优化我的代码。所以这是我的具体场景:我有一个解析器类,它解析图形文件(节点、边、邻接项等)文件格式是版本化的,因此每个版本都存在解析器,这些解析器作为单独的类(ParserV1、ParserV2、...)实现。解析器为应用程序中的某些上层提供相同的功能。因此,它们实现了相同的“接口(interface)”。在C++中,我会将这样的接口(interface)实现为抽象类,所有函数都是纯虚拟。由于虚拟函数需要另一个内存查找并且不能在编译时静态绑定(bind),而且——更重要的是——将不允许内联解析器类中的小方法,使用经典子类习语不会导致我能达到的最

c++ - 请告诉我Range Mex Query的高效算法

我对这个问题有疑问。问题给你一个序列a[0],a1],...,a[N-1],和一组范围(l[i],r[i])(0.计算mex(a[l[i]],a[l[i]+1],...,a[r[i]-1])对于所有(l[i],r[i]).函数mex是最小排除值。WikipediaPageofmexfunction您可以假设N.O(N*(r[i]-l[i])log(r[i]-l[i]))算法很明显,但效率不高。我目前的做法#includeusingnamespacestd;intN,Q,a[100009],l,r;intmain(){cin>>N>>Q;for(inti=0;i>a[i];for(int

c++ - 如何高效统计定义指针的个数?

我有以下C++代码:Some_class*temp1=findTemp1(...);//returnsNULLoravalidpointerSome_class*temp2=findTemp2(...);//returnsNULLoravalidpointerSome_class*temp3=findTemp3(...);//returnsNULLoravalidpointer现在我想计算其中有多少返回了有效指针(0、1、2或3)。我能想到的唯一方法就是一个一个地测试它们:intcount=0;if(temp1)count++;if(temp2)count++;if(temp3)cou

c++ - 用于插入的高效数据结构

我正在寻找一种允许快速(比O(N)更快)任意插入值到结构中的数据结构(类似数组)。数据结构必须能够打印出其元素以插入的方式。这类似于List.Insert()之类的东西(它太慢了,因为它必须将每个元素都移过来),除了我不需要随机访问或删除。插入将始终在“数组”的大小范围内。所有值都是唯一的。无需其他操作。例如,如果Insert(x,i)在索引i(0索引)处插入值x。然后:Insert(1,0)给出{1}Insert(3,1)给出{1,3}Insert(2,1)给出{1,2,3}Insert(5,0)给出{5,1,2,3}它需要能够在最后打印出{5,1,2,3}。我正在使用C++。

c++ - 高效计算 vector 组合

出于好奇,我正在研究一个研究问题,但我不知道如何对我想到的逻辑进行编程。让我向您解释一下:我有四个vector,例如,v1=1111v2=2222v3=3333v4=4444现在我要做的是组合添加它们,也就是v12=v1+v2v13=v1+v3v14=v1+v4v23=v2+v3v24=v2+v4v34=v3+v4到这一步就好了。现在的问题是我想为这些vector中的每一个添加一个来自v1、v2、v3、v4的vector,它以前没有添加过。例如:v3和v4还没有添加到v12,所以我想创建v123和v124。同样,对于所有vector,v12shouldbecome:v123=v12+v

c++ - cmath 中的 pow() 实现和高效替换

这个问题在这里已经有了答案:Themostefficientwaytoimplementanintegerbasedpowerfunctionpow(int,int)(21个回答)关闭8年前。我读过cmath通过执行exp(b*log(a))计算pow(a,b)。当b是整数时不应使用它,因为它会大大减慢计算速度。当计算很多具有相同常量a的连续pow()预先知道b肯定是一个整数?我正在寻找在这些特定情况下高效的快速替代方案。