草庐IT

Container

全部标签

c++ - 包含任意类型的任意 STL 容器的函数模板

我有一个任意的STL容器C,其中包含任意类型T的元素。我想创建一个std::vector,它具有所有元素的拷贝。最干净的方法是什么?templatevoidmyfunction(Ccontainer){/*DerivethetypeTofelementswithinthecontainer*/std::vectormystack;/*Iterateovercontainerandpush_back()theelementsintomystack*/} 最佳答案 vector和set等STL结构应该包含类型定义为T的value_typ

c++ - 使用 boost::assign::list_of 构造 std::vector 时的歧义

这段代码:std::vector(boost::assign::list_of(1)(2)(3));给出错误:main.cpp:Inmemberfunction'void::RequestHandler::processRequest(Foo&,Bar,unsignedint,unsignedint*,constchar*,boost::shared_ptr&)':main.cpp:450:error:callofoverloaded'vector(boost::assign_detail::generic_list&)'isambiguous/4.4.2/bits/stl_vecto

c++ - 为指向集合的指针重载开始/结束是个好主意吗

我很喜欢免费的新概念beginend编写更通用的算法和数据结构。目前,我有时会遇到必须区分调用begin(range)的情况。和begin(*range)当一个类型持有对集合的引用作为指针时。我考虑过是否始终为我自己的集合类型的指针提供重载的开始/结束是个好主意。structContainer{intvalues[3];};constint*begin(constContainer&c);constint*end(constContainer&c);constint*begin(constContainer*c);constint*end(constContainer*c);templ

c++ - std::vector::assign/std::vector::operator=(const&) 是否保证重用 `this` 中的缓冲区?

如果我将一个vector分配或复制到另一个vector(其容量与前者的大小相同或更大),我可以假设后者的缓冲区将被重用吗?下面的例子证明我可以,但是,标准保证吗?std::vector::assign和std::vector::operator=在这方面的行为有什么不同吗?#include#include#includeintmain(){std::vectora{1,2,3,4,5};std::vectorb{1,2,3,4};std::vectorc{1,2,3,4,5,6,7,8,9,10};std::coutLiveexample.更新:Thisanswer提到voidassi

c++ - 获取任何 C++ 可取消引用类型的基础类型

我有一个函数可以创建P基础类型的新对象。这里的P是一个可取消引用的类型,如指针或智能指针。templateautomake_new()例如对于指针和智能指针,structA{inta=3;};A*a=make_new();std::coutab=make_new>();std::couta现在,对于共享指针,我将按如下方式实现make_new,templateautomake_new(){usingPtype=typenameP::element_type;returnP(newPtype);}这不适用于指针。现在,一些同时适用于指针和智能指针的东西,templateautomake_

c++ - std::set 和 boost::container::set 之间的区别

std::set和boost::container::set之间的主要区别是什么? 最佳答案 boost容器和标准容器之间的主要区别是boost容器允许不完整的类型。在实现依赖于底层容器组合的更复杂的数据结构时,这可能会产生巨大的差异。boost容器和标准容器的特定实现之间可能存在性能差异。但这可能是任何一种方式。编辑:这里有一些关于集合/map容器的附加说明(参见ref):[multi]set/map容器的大小经过优化,在父指针中嵌入了红黑树节点的颜色位。[multi]set/map容器不使用递归函数,因此避免了堆栈问题。

c++ - 对于具有默认分配器的标准容器,std::container::size_type 是否保证为 size_t?

喜欢:std::string::size_typestd::list::size_typestd::map::size_typestd::vector::size_type等等两者都是cplusplus.com和cppreference.com说他们通常是size_t,但它们是否真正、明确地保证为size_t的标准除非使用自定义分配器? 最佳答案 对于STL容器-不。[container.requirements.general]中标准的表96,其中列出了任何容器的容器要求X,解释得很清楚:但是,对于basic_string,siz

c++ - 如何 SFINAE 输出非容器参数

我有一个模板函数,我只想为标准容器(或与标准容器兼容的容器,它至少提供一个begin()成员函数)启用。我正在通过以下方式排除非容器SFINAE:templatetypenameContainer::value_typef(constContainer&c,typenamestd::enable_if::value>::type*=nullptr){//implementationhere}std::is_same和decltype看起来不太优雅。有更好的方法吗?PS:我这里需要SFINAE因为我有不同的过载templatef(constEigen::MatrixBase&A)每当我尝

c++ - 基于范围的 For 循环和 ADL

这是2011年对这个问题的扩展:Range-basedforloopsandADL使用VisualStudio2015,我无法使用参数相关查找(ADL)为自定义容器创建基于范围的for循环。我在下面使用自定义容器制作了一个非常简单的测试用例:#includenamespaceFoo{templateclassContainer{public:std::vectorvalues;};}templatetypenamestd::vector::iteratorbegin(Foo::Container&foo){returnfoo.values.begin();}templatetypena

c++ - 对于类型 Class::Type,我可以从 const Class 派生 const Class::Type 吗?

我正在实现一个容器,例如:templateclassContainer{public:usingvalue_type=T;...};是否有从constContainer派生constvalue_type的好方法?背景:我已经通过嵌套模板类实现了迭代器类型:templateclassiterator_base{public:...Value&operator*()const;private:Container*c;};usingiterator=iterator_base;usingconst_iterator=iterator_base;工作正常,但iterator_base的第二个模