草庐IT

STL容器之queue

全部标签

c++ - 如果存在仅推送线程和仅弹出线程,C++ std::queue 是否安全?

我想知道这种情况是否(线程)安全。有一个线程只推送到一个std::queue。还有另一个线程只从std::queue弹出。由于队列是否为空,线程安全地管理,后面的线程不会弹出失败。你能帮帮我吗?谢谢。 最佳答案 我认为答案是否定的。标准说(§23.2.2/1):Forpurposesofavoidingdataraces(17.6.5.9),implementationsshallconsiderthefollowingfunctionstobeconst:begin,end,rbegin,rend,front,back,data,

c++ - std::queue 内存消耗导致内存泄漏 - C++?

即使在我从qInt队列中弹出所有元素后,以下代码也没有释放3000个元素消耗的内存。是什么原因?std::queueqInt;//Step01:Checktherunningmemoryfor(inti=0;i 最佳答案 默认情况下,std容器在保留内存后不会释放内存。std::queue通常在提供shrink_to_fit的std::dequeue类型上实现。.如果您不使用C++11,请使用swapidiom. 关于c++-std::queue内存消耗导致内存泄漏-C++?,我们在St

c++ - 带有 C++ 包装器的 OpenCL - 如何将 cl::CommandQueue 转换为 cl_command_queue?

我将OpenCL与CL/cl.hppc++​​包装器一起使用。所以我有C++对象,例如cl::CommandQueue而不是cl_command_queue。我还想使用AMD的BLAS库clAmdBlas。那里的函数需要一个cl_command_queue作为它们的参数之一。如何从cl::CommandQueue获取cl_command_queue? 最佳答案 要获取cl_command_queue对象,您只需使用()运算符:cl::CommandQueuecppQueue;...cl_command_queuequeue=cppQ

c++ - 可以具有存储相互连续的实例的类似 vector 的容器?

我需要一个API尽可能接近std::vector的容器类(除非没有重新分配),但可以指定其元素的存储(而不是其成员变量,如大小)从现有缓冲区分配,这样我就可以将所有vector的元素保存在一个连续的缓冲区中。也就是说,一个vector的.end()指向缓冲区中与下一个vector的.front()相同的元素。我不知道我是否可以简单地使用带有std::vector的自定义分配器,因为我找不到关于它是否为整个类分配存储的信息,包括大小和指针数据成员(在这种情况下我不能使用这种方法),或者只是它包含的数据元素(在这种情况下我可以使用它)。我只需要分配一次实例的存储空间,因此重新分配没有问题。

HarmonyOS鸿蒙开发指南:容器组件 dialog开发指导

目录创建Dialog组件设置弹窗响应场景示例创建Dialog组件在pages/index目录下的hml文件中创建一个Dialog组件,并添加Button组件来触发Dialog。Dialog组件仅支持width、height、margin、margin-[left|top|right|bottom]、margin-[start|end]样式。

c++ - 固定大小的容器到可变参数模板参数列表的转换

我必须调用一个可变模板函数,它可以接受任意数量的参数。templatevoidf(Args&...args);我想写一个小的包装函数,这样我就可以用固定大小的容器(如std::array)中包含的N个相同类型的参数调用f。目标是写类似的东西std::arrayarr={1,2,3};wrapper(arr);//callsf(1,2,3);我尝试使用初始化列表和std::forward的某种组合,但无济于事。有没有办法实现我想要的? 最佳答案 如果您的编译器支持C++14,您可以按以下方式进行:templatevoidf(Args&

c++ - 从函数按值返回STL vector 的有效方法

这是Efficientwaytoreturnastd::vectorinc++的一个扩展问题#include#include#includestd::vectorfunc1(){std::vectorv;v.reserve(1e6);for(inti=0;ifunc2(){std::vectorv;v.reserve(1e6);for(inti=0;iv1=func1();autoend1=std::chrono::steady_clock::now();printf("%d\n",std::chrono::duration_cast(end1-start1).count());aut

c++ - 分配器感知容器分配是如何实现的?

例如,来自std::deque::operator=inC++Reference:(1)复制赋值(conststd::deque&other)Replacesthecontentswithacopyofthecontentsofother.Ifstd::allocator_traits::propagate_on_container_copy_assignment()istrue,thetargetallocatorisreplacedbyacopyofthesourceallocator.Ifthetargetandthesourceallocatorsdonotcompareequ

c++ - C++ STL 函数 find() 不接受用户定义类的迭代器参数

当我在std::find()中传递用户定义的迭代器参数时,GCC5.2.1。编译器(在Ubuntu15.10上)给出两条错误消息:(1)/usr/include/c++/5/bits/stl_algo.h:162:34:error:nomatchingfunctionforcallto‘__iterator_category(Text_iterator&)’std::__iterator_category(__first));(2)/usr/include/c++/5/bits/stl_iterator_base_types.h:204:5:error:notypenamed‘iter

c++ - 从不同类型容器的迭代器初始化 vector

给出以下代码:#include#includeintmain(){chararr[3]={1,2,3};std::vectorvec={1,2,3};std::vectorvec_one(std::begin(arr),std::end(arr));std::vectorvec_two(vec.begin(),vec.end());}vec_o​​ne和vec_two的初始化是未定义的、实现定义的还是根据正常类型转换规则定义的?如果交换char和int类型会怎样? 最佳答案 它们都很好,遵循将char转换为int(所以不用担心)和i