草庐IT

c++ - 查找与无符号 vector 的所有部分匹配

对于我的一个AI项目,我需要将适用于其部分组件的所有规则应用于分解状态。这需要非常频繁地完成,所以我正在寻找一种尽可能快的方法。我将用字符串描述我的问题,但真正的问题与无符号整数vector的处理方式相同。我有一堆像这样的条目(长度为N),我需要以某种方式存储它们:__a_bc_e_____deabcd_fffff__a__我的输入是单个条目ciede,我必须尽快找到与之匹配的所有存储条目。例如,在这种情况下,匹配将是c_e__和___de。应该支持删除和添加条目,但我不在乎它有多慢。我想尽可能快的是:for(constauto&entry:matchedEntries(input))

c++ - 如何让派生类在调用基类之前做一些 Action ?

首先:我不是开发人员,我可能无法理解您的某些信息,而且由于英语不是我的母语,我的问题可能很难理解。考虑:classMyVector{std::vectorvec;std::mutexvector_m;public:voidMVpush_back(commandt){this->vector_m.lock();this->vec.push_back(t);this->vector_m.unlock();}};command是一个自定义类(它的内容在这里似乎不相关;复制构造函数确实存在)。基本上,因为我有很多可能的作者和读者,所以我想强制使用mutex访问vec参数。因为我只会使用push

c++ - 代码优化子集总和

这是我的代码,它打印总和等于给定总和的子集元素(它仅适用于正数):#includeusingnamespacestd;voidtraverse(vectorvec){for(inta=0;avec,intsum,vectornow){if(sum==0){traverse(now);}elseif(sum0&&vec.size()>0){for(inta=0;avecc(vec.begin()+a+1,vec.end());possible(vecc,sum-vec[a],now);now.erase(now.end()-1);}}}intmain(){intn,sum;cin>>n>

c++ - C++ 中是否有类似 Haskell Data.Sequence 的东西?

是否有任何C++库实现了类似HaskellData.Sequence容器的东西?我最感兴趣的是:维护元素顺序(它们被插入的顺序)。O(logn)通过索引访问。又名operator[](size_typepos)。O(logn)在中间插入/删除(通过索引)。 最佳答案 在我看来,要实现*这样的数据结构,您需要一棵树来存储每个节点中的元素数量。它允许在O(log(N))中插入和检索,并且只需通过计算树中给定节点“左侧”的元素数量来维护索引。*我在这里回答的问题可能略有不同,实际问题是要求推荐一个库,这在SO上显然是题外话。这棵树的一个节

c++ - 并行循环中的惰性 vector 访问

在性能关键的并行代码中,我有一个vector,其元素是:计算成本很高,结果是确定性的(给定位置的元素值将仅取决于位置)随机访问(通常访问次数大于或远大于vector的大小)集群访问(许多访问请求相同的值)vector由不同的线程共享(竞争条件?)为避免堆碎片整理,永远不要重新创建对象,而是尽可能重置和回收放置在vector中的值将由多态对象提供目前,我预先计算了vector的所有可能值,因此竞争条件应该不是问题。为了提高性能,我正在考虑创建一个惰性vector,以便代码仅在请求vector元素时才执行计算。在并行区域中,可能会发生多个线程同时请求并可能计算同一元素的情况。我如何处理这种

c++ - std::vector::assign/std::vector::operator=(const&) 是否保证重用 `this` 中的缓冲区?

如果我将一个vector分配或复制到另一个vector(其容量与前者的大小相同或更大),我可以假设后者的缓冲区将被重用吗?下面的例子证明我可以,但是,标准保证吗?std::vector::assign和std::vector::operator=在这方面的行为有什么不同吗?#include#include#includeintmain(){std::vectora{1,2,3,4,5};std::vectorb{1,2,3,4};std::vectorc{1,2,3,4,5,6,7,8,9,10};std::coutLiveexample.更新:Thisanswer提到voidassi

c++ - 比较两个映射 vector

我有两种获取大量数据的方法。数据存储在已排序的vector>中.我想确定两个vector之间是否存在不一致。我目前在做什么(伪代码):foriin0...min(length(vector1),length(vector2)):for(k,v)invector1[i]:ifv!=vector2[i][k]://reportthatkisbadforindexi,//withvector1havingv,vector2havingvector2[i][k]foriin0...min(length(vector1),length(vector2)):for(k,v)invector2[i]

c++ - std::vector insert() 重新分配

我查看了std::vector代码,发现了一些我不太明白的东西。当capacity分配新缓冲区复制旧缓冲区的前缀(0-插入索引)在新缓冲区中构造新元素复制旧缓冲区的后缀(index-end)对旧缓冲区中的所有项目调用析构函数释放旧缓冲区据我所知,前缀和后缀的复制是用memmove完成的。memmove不是数据的纯二进制拷贝吗?它不会调用元素的构造函数,是吗?我想知道的是,如果内存只是移动,而不是在新缓冲区中重新构造,为什么函数会调用旧缓冲区中元素的析构函数? 最佳答案 我查看了MSVC8vector实现-我看不到memmove().

c++ - 我需要帮助将数组添加到 C++ 中的 vector

我正在关注OpenGLsuper圣经第5版,他们将vector(数学中的vector)定义为typedeffloatM3DVector3f[3];我正在尝试将它的一个实例添加到std::vector(C++中的“可调整大小的数组”),但是我一直收到一条错误消息:arrayinitializationneedscurlybracesFullError我定义std::vector的方式以及我添加到它的方式是:std::vectorvertices;floatvertex[3];sscanf_s(line.c_str(),"%*s%f%f%f",&vertex[0],&vertex[1],&

c++ - Minecraft 克隆的最佳框选择方法

我正在制作一个Minecraft克隆作为我的第一个OpenGL项目,并且卡在框选择部分。做出可靠的框选择的最佳方法是什么?我一直在研究一些AABB算法,但它们都没有很好地解释它们到底做了什么(尤其是经过super调整的算法),我不想使用我不理解的东西。因为世界是由立方体组成的,所以我使用八叉树来消除光线转换计算的一些压力,基本上我唯一需要的就是这个函数:floatcube_intersect(Vectorray,Vectororigin,Vectormin,Vectormax){//???}光线和原点很容易获得Vectorray,origin,point_far;doublemx,my