草庐IT

HAS_TRADITIONAL_STL

全部标签

c++ - 有没有更好的方法来检查 STL 容器是否是多*容器

在为适用于各种标准C++11容器的框架编写单元测试期间,我跨过了我想以通用方式创建测试数据的问题。这里我需要知道关联容器C是否是multi*容器。例如。如果C是std::set或std::multiset。我搜索了所有这些容器的接口(interface),它们的共同点是它们都有一个insert(value_typeconst&)方法。但从我的角度来看,显着的区别在于multi*版本只返回一个迭代器,而“非”multi*版本返回一个std::pair。所以我选择这个作为差异化因素。我的结果代码是:#include#includetemplateclassis_multi_containe

c++ - 是否有与 Thrust(GPU 的并行 STL)类似的库,但用于 GPGPU AMD Radeon?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有类似Thrust的库(用于GPU的并行STL,可以使用OpenMP/TBB,C++CUDA),但用于GPGPUAMDRadeon(例如使用OpenCL而不是使用CUDA)?所需的标准STL算法(排序、合并、删除/复制、In/Exc

备战蓝桥杯---数据结构与STL应用(进阶4)

今天主要围绕并查集的一些今典题目展开:在这里,我们把逻辑真的组合,用并查集即可。一开始,我觉得把a,b,c等价,把第一个赋a,接下来推即可,但这样在判断矛盾时还需要选择合适的点find,于是我们把所有可能合并,这样find时就可以轻松一点,下面是AC代码:#includeusingnamespacestd;intn,k,fa[200000],cnt;intfind(intx){if(fa[x]==x)returnx;elsereturnfa[x]=find(fa[x]);}voidmerge(intx,inty){fa[find(x)]=find(y);}intmain(){cin>>n>>k

c++ - STL栈和队列的内部实现

我正在使用STL堆栈和队列来存储大量项目。内部如何实现标准模板库中的堆栈?是链表的形式吗?或者是否有任何最大尺寸? 最佳答案 C++标准库中的栈和队列都是容器适配器。这意味着它们使用指定的容器作为存储数据的底层手段。默认情况下,它们都使用std::deque但您可以使用例如vector与std::stack>s; 关于c++-STL栈和队列的内部实现,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

c++ - 插入任何 STL 集合的方法

我想编写一个方法,它能够接受一个集合或一个列表并向其中插入一个项目。所以我有boolgetValues(conststd::string&query,std::vector*pVals)const{}但是我想要一些更通用的东西而不是std::vector,这样我就可以传递vector或集合。某种迭代器? 最佳答案 STL的工作方式是接受模板化的迭代器作为您要处理的范围的开始和结束。当需要一般插入元素时,可以使用特殊的插入迭代器。//acceptinsertersinsteadofacontaineranduseatemplate//

c++ - BOOST_FOREACH : What is the error on using this of a STL container?

有谁知道为什么以下会在VC9上产生错误?classElem;classElemVec:publicvector{public:voidfoo();};voidElemVec::foo(){BOOST_FOREACH(Elem&elem,*this){//Dosomethingwithelem}return;}我得到的错误是:errorC2355:'this':canonlybereferencedinsidenon-staticmemberfunctions我现在拥有的唯一(hack)解决方案是:voidElemVec::foo(){ElemVec*This=this;BOOST_FO

c++ - 使用 STL/Boost 查找和修改 vector 中的匹配元素

假设我有一个这样声明的vector:structMYSTRUCT{floata;floatb;};std::vectorv;现在,我想找到v中共享相同a的所有元素,然后对它们的b进行平均,即假设v包含这五个元素{a,b}:{1,1},{1,2},{2,1},{1,3},{2,2}我想得到v[0]、v[1]、v[3](其中a为1)和平均值b:(1+2+3)/3=2,以及v[2]和v[4](其中a为2)和平均b:(1+2)/2=1.5之后v将如下所示:{1,2},{1,2},{2,1.5},{1,2},{2,1.5}我不太熟悉STL或Boost,所以我只能弄清楚如何在C++中以“暴力”方式

c++ - 跨 VS 项目的 STL vector 损坏

我有一个VisualStudio2005解决方案,其中包含几个相互独立构建的项目。主项目静态链接其他项目。我在其中一个静态链接库中遇到非常奇怪的STLvector损坏。例如,我声明了一个std::vector然后执行了一个sort(thatVector.begin(),thatVector.end()),但是当我调试它并查看反汇编时,我看到了这个:std::vector,std::allocator>>::begin非常奇怪的是SomeOtherClass和SomeOtherTemplate是在主项目中声明的,所以这个库应该完全不知道它们。我试过卡住所有其他线程,认为其中一个可能正在破

c++ - 关于 C++ STL 容器交换函数

最近了解到所有的STL容器都有swap功能:即c1.swap(c2);将导致c1下的对象被分配给c2,反之亦然。我问我的教授,在c1和c2作为引用的情况下是否也是如此。他说遵循相同的机制。我想知道这是怎么发生的,因为无法重置C++引用。 最佳答案 引用是别名。如果您有两个引用,调用swap将交换它们所引用的内容,而不是引用本身。C&r1=c1;//r1referencesc1C&r2=c2;//r2referencesc2r1.swap(r2);//sameasc1.swap(c2)交换的不是变量,而是使它们在逻辑上独立的变量。如果

STL---stack&&queue

一、stack1.stack的介绍stack介绍文档 https://legacy.cplusplus.com/reference/stack/stack/?kw=stack1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2.stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3.stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空