草庐IT

STL-Like

全部标签

c++ - 使用 2 个参数堆叠 STL

我在C++中实现了一个B树,我有一个保存对的堆栈。我的问题是,我如何放入这个堆栈,因为push只接受1个参数。谢谢 最佳答案 使用标准库提供的std::pair。您可以使用函数make_pair创建它们.#include#include#includeusingnamespacestd;intmain(intargc,char**argv){intmyInt=1;stringmyString("stringVal");stack>myStack;myStack.push(make_pair(myString,myInt));retu

c++ - 使用 STL 算法重写的指针的循环示例,没有循环?

例如,我将如何重写下面的代码,使用没有循环的STL算法?vectorpizzaBox;intbiggestSlice=0;for(int*p=&pizzaBox[0];p!=pizzaBox[pizzaBox.size()];p++){if(*p>biggestSlice)biggestSlice=*p;} 最佳答案 假设您实际上是指vector,并在更正循环结束条件后,您可以使用max_element算法在这里:intbiggestSlice=*max_element(pizzaBox.begin(),pizzaBox.end()

与 vector 相比,C++ STL 队列内存使用情况?

我想知道与vector相比,队列到底使用了多少内存。前几天我遇到了一个问题,我有一个使用大约60MB的int队列数组,当相同的数据被放入一个vector的vector中时,它使用了大约4MB。这是我在编写程序时的错误,还是STL队列通常使用比vector更多的内存? 最佳答案 std::queue是容器适配器,而不是容器本身。那么让我们比较一些实际容器的开销:std::vector非常节省内存,它几乎使用零开销。std::vector在大多数平台上,每个项目使用大约4个字节。std::list内存效率非常低,每个项目可能会使用两个开

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++ - 我应该返回一个迭代器还是一个指向 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++ - 什么 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

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进行比较是双重否定,因此它们做的事情完全一样?是否真的存在我没有看到的差异,这是网站文档中的错误吗?如果是后者,正确的做法是什么?