草庐IT

vector_c

全部标签

c++ - 如何在 C++ 中获取两个 vector 共有的字符?

我正在尝试比较两个vector对象,并返回一个vector,其中包含出现在两个vector中的所有字符。如果不编写一些非常复杂的手动方法,我将如何解决这个问题,该方法将第一个vector中的每个字符与第二个vector中的每个字符进行比较,并使用if将其添加到第三个vector(如果它们将被返回)匹配。也许我缺乏对vector的实际经验让我想象这会比实际情况更难,但我怀疑有一些我无法通过搜索找到的更简单的方法。 最佳答案 我认为您正在寻找std::set_intersection.但是必须对源vector进行排序。如果您不关心输出v

c++ - STL:为 vector 写入 "where"运算符

我需要根据几个bool谓词在vector中找到索引。例如:vectorv;vectoridx;idx=where(bool_func1(v),bool_func2(v),...);声明**where**函数的方式是什么,以便在vector上使用几个用户定义的bool函数?谢谢阿曼。一周后编辑我用模板做了一些复杂的解决方案。但实际上,我可以使用已经预定义的valarray来完成我的任务。这是代码片段,也许有人会发现它有用:doubledr=Rc/(double)Nbins,r;sigma.resize(Nbins);rr=sigma;valarrayvz(&data.vz[0],data

c++ - 向抽象类的 std::vector 添加元素

我想将从公共(public)接口(interface)(抽象类)派生的类的对象存储在该抽象类的std::vector中。这个vector应该在一个循环中填充,通常我会调用一个类的构造函数并将创建的对象推送到vector中。据我所知,在抽象类的情况下,我只能存储指向该类的指针,因此我需要push_back派生类的指针。但是,我不确定这些新创建的对象的范围。请看下面的代码。这段代码可以编译并运行良好,但我的问题是:a)对象是否保证存在于主函数的第二个for循环中?或者它们可能会在创建它们的循环范围之外停止存在?b)是否调用了所有对象的析构函数或可能存在内存泄漏?#include#inclu

python - 在 C++ 中切片 vector

在C++中是否有等价于列表切片[1:]的vector?我只想从vector中获取除第一个元素以外的所有元素。Python的列表切片操作符:list1=[1,2,3]list2=list1[1:]print(list2)#[2,3]C++期望的结果:std::vectorv1={1,2,3};std::vectorv2;v2=v1[1:];std::cout 最佳答案 这可以使用std::vector的复制构造函数轻松完成:v2=std::vector(v1.begin()+1,v1.end());

c++ - 如何按特定的预定顺序对字符串 vector 进行排序?

问题:我需要按照确切的特定顺序对字符串vector进行排序。假设我们有一个常量vector或一个具有确切顺序的数组:vectorcorrectOrder={"Item3","Item1","Item5","Item4","Item2"};接下来,我们有一个动态传入vector,它将具有相同的项目,但它们可能混合在一起并且数量较少。vectorincommingVector={"Item1","Item5","Item3"};所以我需要按照第一个vectorcorrectOrder的顺序对incommingvector进行排序,结果必须是:vectorsortedVector={"Ite

c++ - vector<T>::swap 和临时对象

代码如下:#includeintmain(){vectorv1(5,1);v1.swap(vector());//trytoswapv1withatemporaryvectorobject}上面的代码无法编译,错误:error:nomatchingfunctionforcallto‘std::vector>::swap(std::vector>)’但是,如果我将代码改成这样,它可以编译:intmain(){vectorv1(5,1);vector().swap(v1);}为什么? 最佳答案 因为vector()是一个rvalue(暂

C++为什么vector初始化会调用copy constructor

当你用下面的方式初始化一个vector时:std::vectorMyVec(10);它调用默认构造函数一次,然后再调用复制构造函数10次。所以,如果我没理解错的话,vector中的对象都是拷贝构造函数生成的。有人可以解释调用复制构造函数而不是默认构造函数的原因吗?或者甚至只是在没有对象的情况下分配内存? 最佳答案 它将分配没有对象的内存,除非您指定初始大小为10,因此它必须创建10个对象。如果你想要存储10个对象而不实际创建它们,你可以这样做:std::vectorMyVec;MyVec.reserve(10);如果你看一下你正在使

c++ - vector 与数组性能

在另一个线程中,我开始了关于vector和数组的讨论,其中我主要是在唱反调,以插入按钮。然而,在这个过程中,我偶然发现了一个让我有点困惑的测试用例,我想就它进行真正的讨论,关于我因为唱反调而受到的“虐待”,开始一个真正的现在不可能对该线程进行讨论。但是,具体的例子让我很感兴趣,我无法对自己进行令人满意的解释。讨论的是vector与数组的一般性能,忽略了动态元素。例如:显然在vector中连续使用push_back()会减慢它的速度。我们假设vector和数组预先填充了数据。我提出的示例,随后由线程中的个人修改,如下所示:#include#include#includeusingname

c++ - std::vector 调整大小方法背后的设计原理是什么?

模板类vector中的许多方法采用对value_type对象的const引用,例如:voidpush_back(constvalue_type&val);当resize按值获取其value_type参数时:voidresize(size_typen,value_typeval=value_type());作为一个非专业的C++程序员,我只能想到这种选择的缺点(例如,如果size_of(value_type)足够大,可能会发生堆栈溢出)。因此,我想向对语言有更多了解的人提出的问题是:这个选择背后的设计原理是什么? 最佳答案 voidr

c++ - SSE减少浮点 vector

如何使用sse内在函数获取浮点vector的总和元素(减少)?简单的串口代码:void(float*input,float&result,unsignedintNumElems){result=0;for(autoi=0;i 最佳答案 通常您会在循环中生成4个部分和,然后在循环后对4个元素进行水平求和,例如#include#include#includefloatvsum(constfloat*a,intn){floatsum;__m128vsum=_mm_set1_ps(0.0f);assert((n&3)==0);assert(