草庐IT

algorithm

全部标签

c++ - 查找 vector 是否包含第二个元素等于 X 的对

我有这个vector:usingnamespacestd;vector>vec={};我想知道是否存在一对与b==X.我知道std::find来自但不知道如何在这里应用它。我应该编写自己的函数来执行此操作吗?boolis_in_vec(X){for(auto&e:vec)if(e.second==X)returntrue;returnfalse;}这样有效率吗? 最佳答案 如果您只想知道是否存在满足您条件的元素,您的解决方案看起来不错。我会在循环中使用const引用,因为循环不应该改变vector的元素:for(constauto&

c++ - 多边形轮廓上的边并不总是正确的

我正在使用下面的算法生成四边形,然后将其渲染成这样的轮廓http://img810.imageshack.us/img810/8530/uhohz.png图像上看到的问题是有时线条太细,而它们应该始终保持相同的宽度。我的算法找到第一个顶点的4顶点,然后下一个顶点的顶部2顶点是前一个顶点的底部2。这会创建连接线,但似乎并不总是有效。我该如何解决这个问题?这是我的算法:voidOGLENGINEFUNCTIONS::GenerateLinePoly(conststd::vector>&input,std::vector&output,intwidth){output.clear();if(

c++ - 在压缩文本文件中快速搜索

我需要能够在大量压缩文件(.txt)中搜索文本。压缩可能会更改为其他内容,甚至成为专有的。我想避免解压缩所有文件并压缩(编码)搜索字符串并在压缩文件中搜索。这应该可以通过对所有文件使用相同的密码本进行霍夫曼压缩来实现。我不想重新发明轮子,所以..任何人都知道可以执行类似操作的库或已实现和测试的Huffman算法,或者更好的主意?提前致谢 最佳答案 大多数文本文件使用LZ-family之一进行压缩算法,它结合了DictionaryCoder连同EntropyCoder例如霍夫曼。由于DictionaryCoder依赖于一个不断更新的“

c++ - 点云三角剖分算法

我想创建一个简单的C++应用程序,给定100个随机点(及其凸包),它将对这些点的云进行三角剖分。我已经搜索过这个主题,我可以看到Delaunay三角剖分是一个选项,但我仍然不明白如何实现它(例如在C++中)。同样在下一个级别,我想将所有Delaunay“非法”三角形涂成不同的颜色,以更好地展示和理解Delaunay的算法。谁能帮我理解如何对这些点进行三角剖分?也许是一小部分代码或通常是我需要实现的算法? 最佳答案 我强烈建议不要从头开始编写任何Delaunay三角剖分算法。如果我这样做是为了直观地了解算法的输出是什么样子,我会选择J

C++检查 vector 中一行中有多少个相同元素

我有一个包含24.000个元素的大vector,例如:(1,1,1,1,3,3,3,3,3,3,5,5,5,...etc)我想检查一行中有多少相同的元素,例如:4-6-3..等我使用这段代码:staticintcounter=1;vectornumbers;for(intn=0;n是否有任何算法可以更快地完成同样的工作; 最佳答案 @rhalbersma基本上给了你正确的答案。作为附录,如果您想以更标准的方式重写算法:#include#include#include#include#includeintmain(){std::vec

c++ - 将 std::async 与模板函数一起使用

我如何,或者,我可以将模板函数传递给async?代码如下://main.cpp#include#include#include#includeintmain(){std::vectorv(16,1);autor0=std::async(std::launch::async,std::accumulate,v.begin(),v.end(),double(0.0));std::cout错误信息如下:^a.cpp:13:88:note:candidatesare:Infileincludedfroma.cpp:1:0:/usr/include/c++/4.8/future:1523:5:n

c++ - (num+mod)%mod 语句需要什么?

这个程序中的ans=(ans+mod)%mod语句需要什么?假设mod=10^9+7。此函数在O(log(n))复杂度的模运算下计算a的b次方:longlongpower(longlonga,longlongb){if(b==0)return1ll;longlongans=power(a,b/2);ans=(ans*ans)%mod;ans=(ans+mod)%mod;if(b%2==1)ans=(ans*a)%mod;ans=(ans+mod)%mod;returnans;} 最佳答案 这种结构最常见的用法是确保结果是非负的。标准

c++ - 3个顶点之间的角度

例如,GetAngle((0,0),(100,0),(100,100))=90。我如何找到3个2D点之间的角度。 最佳答案 给定A、B和C点,您需要AB和AC之间的角度?首先计算vectorAB和AC——它只是B的坐标减去A的坐标,对于AC也是如此。乘坐dotproduct的两个vector。这只是vector的x坐标乘以y坐标的乘积。将此数字除以AB的长度,然后再除以AC的长度。这个结果是两个vector之间夹角的余弦,所以用arccos()就可以了。 关于c++-3个顶点之间的角度,

c++ - 最快的 C++ 容器 : Unique Values

我正在编写一个与MySQL数据库交互的电子邮件应用程序。我有两个表来获取我的数据,其中一个包含取消订阅,另一个是标准用户表。截至目前,我正在创建一个指向电子邮件对象的指针vector,并将所有未订阅的电子邮件存储在其中,最初是这样。然后我有一个标准的SQL循环,我在其中检查电子邮件是否不在取消订阅vector中,然后将其添加到全局发送电子邮件vector中。我的问题是,是否有更有效的方法来做到这一点?我必须为系统中的每一封电子邮件搜索unsubvector,最多5万封不同的邮件。是否有更好的搜索结构?并且,一个更好的结构来维护一个独特的值(value)集合?如果它已经包含它,也许会简单

c++ - 返回 2 的幂的数字的幂的最快算法是什么?

给定n=2^k,假设n是32位整数,我如何使用C/C++按位求出k? 最佳答案 GCC有__builtin_clz在x86/x64上转换为BSR,在ARM上转换为CLZ等,并在硬件未实现时模拟指令。VisualC++2005及更高版本有_BitScanReverse.使用这些函数,你可以得到你的k 关于c++-返回2的幂的数字的幂的最快算法是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu