草庐IT

STL_container_type

全部标签

c++ - 返回值优化 : ho can I avoid copy construction of huge STL containers.

当我想要一个函数返回一个容器时:vectorfunc(){vectorresult;...returnresult;}按以下方式使用:vectorresult=func();为了避免复制我的容器的开销我经常编写函数,以便它只返回接受一个容器的非常量实例。voidfunc(vector&result){result.clear();...result;}按以下方式使用:vectorresult;func(result);难道我的努力没有意义,因为我可以确定编译器总是使用返回值优化? 最佳答案 没有意义。你提到的RVO类型称为命名RVO

c++ - 从 std::array 等获取 size_type 的惯用方法

由thisquestion触发,我想出了以下代码(在我的回答中是boost::array,但同样适用于std::array):template::size_typesize>voidDataTransform(std::arraydata){}我对::size_type一点都不满意.我必须以一定的大小进行实例化,才能知道size_type.对于std::array我本可以使用size_t,那么一般情况呢?如果size_type怎么办不是size_t?或者更一般的(即不适用于std::array)如果size_type怎么办?不同的尺寸是不同的(愚蠢但可能)?我知道这个问题相当学术,有很

c++ - 我应该返回一个迭代器还是一个指向 STL 容器中元素的指针?

我正在开发一个用于将现有代码移植到不同平台的引擎。现有代码是使用第三方API开发的,我的引擎将根据我的新平台重新定义这些第三方API函数。以下定义来自API:typedefunsignedlongshape_handle;shape_handlemake_new_shape(inttype);我需要重新定义make_new_shape并且我可以选择重新定义shape_handle。我已经定义了这个结构(简化):structShape{inttype};make_new_shape的调用者不关心Shape的底层结构,它只需要一个“句柄”,这样它就可以调用如下函数:void`set_sha

c++ - 错误 : '...' does not name a type

我有一个工作项目。重新安排一些代码后,我尝试重新编译我的项目,然后奇怪的事情开始发生。查看编译器输出的这段摘录。我正在使用MinGWG++从Windows上的Eclipse进行编译。****BuildofconfigurationDebugforprojectPract2********InternalBuilderisusedforbuild****g++-O0-g3-Wall-c-fmessage-length=0-omove.o..\move.cppInfileincludedfrom..\/game.h:11:0,from..\/piece.h:10,from..\/move.

c++ - 什么 STL 容器执行删除之间的元素?

我需要选择一个容器来保存指向我定义的类型(Particle)的指针。我正在使用预分配的粒子ObjectPool(其中包含预先分配在std::vector上的对象)。我的粒子发射器在需要发射时向粒子池询问粒子(以避免游戏中的粒子分配)。当一个Particle过期时,它被返回到ParticleObjectPool。如您所见,当我遍历我的粒子引用容器(需要选择一个)以更新它时,我将不得不检查哪些粒子已经过期(lifetime)并将它们返回到粒子池,过期粒子可能在容器中的任何位置。我一直在考虑使用std::list,原因如下:列表(AFAIK)在开头提供恒定时间插入,并在任何点(假设您已迭代到

c++ - 分配STL容器安全吗?

例如:sets1;sets2;s1.insert(1);s2.insert(2);s1=s2;安全吗?如果是这样,旧元素(以及它们出现的内存)是从哪里来的? 最佳答案 是的,做作业是安全的。它调用复制构造函数或赋值运算符,旧元素在s1中被删除,并被s2的元素替换。[注意:如果存在任何潜在问题,那么复制构造函数和赋值将被禁止,如fstream、ofstream、ifstream.] 关于c++-分配STL容器安全吗?,我们在StackOverflow上找到一个类似的问题:

c++ - Unique_ptr 的 STL vector - 如何重置?

我创建了两个标准的unique_ptrvector:std::vector>students;std::vector>teachers;然后,我创建一个新对象并将其放入vector中:students.push_back(std::unique_ptr(newStudent()));teachers.push_back(std::unique_ptr(newTeacher()));完成所有操作后,如何删除vector?Whitoutunique_ptr我不得不做一个循环并删除每个对象:while(!students.empty()){deletestudents.back();stud

c++ - 是否有一种 STL 算法可以根据某种容差查找容器中是否存在元素?

我要解决的问题如下:我有一个浮点容器(双vectorvector):std::vector>dv{{0.0,0.0},{1.0,0.0},{0.0,1.0},{1.0,1.0}};然后,假设我有一个新点(双vector):std::vectorv1{0.0001,1.0};我想根据一些公差检查v1点是否存在于dv容器中。两个vector之间的距离计算为欧氏距离。我查看了相关问题和答案:Howtofindifanitemispresentinastd::vector?checkifastd::vectorcontainsacertainobject?并且还尝试使用std::find_if

为什么我遇到错误:attributeError:'int'对象没有属性'type'

我正在将LLVMlite与Pyvex结合使用。我已经在llvmlite中定义了一些功能,如下所示:defint32(val):returnir.Constant(ir.IntType(32),val)defput64(putoffset,val):llvmtmp=builder.gep(regtag,(int32(0),int32(putoffset)),True)returnbuilder.store(val,llvmtmp)但是,当我想使用以下代码调用此函数时:forstmtinirsb.statements:ifisinstance(stmt,pyvex.IRStmt.Put):puto

c++ - STL中upper_bound和lower_bound的区别

我在这些页面上查看upper_bound和lower_bound算法在STL中的工作方式:lower_bound,upper_bound,并且在这些页面上以相同的方式记录:lower_bound,upper_bound查看链接中的代码,它们似乎对我做了完全相同的事情,只有以下几行不同(查看前2个链接中的代码):下限(第10行):if(*itupper_bound(第10行):if(!(val但是肯定颠倒被比较的元素然后将它们与false进行比较是双重否定,因此它们做的事情完全一样?是否真的存在我没有看到的差异,这是网站文档中的错误吗?如果是后者,正确的做法是什么?