草庐IT

back_emplace_iterator

全部标签

c++ - std::filesystem::directory_iterator 链接器问题 (C++17)

这个问题在这里已经有了答案:LinkerrorsusingmembersinC++17(4个答案)关闭4年前。在尝试使用C++17标准中的std::filesystem::directory_iterator时,我的C++构建出现问题。代码如下:std::vectorIO::getDirectoryList(std::filesystem::path&dirPath){std::vectorfiles;for(auto&file:std::filesystem::directory_iterator(".")){files.push_back(file.path());}returnf

c++ - 特化 iterator_traits

我想专攻std::iterator_traits对于不具有通常的嵌套typedef(如value_type、difference_type等)的容器类模板的迭代器,我不应该修改其源代码。基本上我想做这样的事情:templatestructiterator_traits::iterator>{typedefTvalue_type;//etc.};除了这不起作用,因为编译器无法推断出T来自Container::iterator.有什么可行的方法可以达到同样的目的吗?例如:templateclassSomeContainerFromAThirdPartyLib{typedefTValueTy

C++ 标准 : Unexpected const_iterator in multiset

我最近遇到了一个奇怪的问题,在遍历多重集时,我得到的是const_iterator而不是预期的iterator。结果证明这对MSVC来说不是问题,但g++给了我一个错误:error:invalidinitializationofreferenceoftype'myPtr&'fromexpressionoftype'constboost::shared_ptr'相关代码:typedefstd::multisetmyList;myList_mystuff;voidtick(floatdt){for(myList::iteratori=_mystuff.begin();i!=_mystuff

c++ - 在 push_back pop_front 场景中是否需要使用互斥锁锁定 STL 列表?

我有一个线程后推到STL列表,另一个线程从列表中弹出。在这种情况下我需要用互斥量锁定列表吗? 最佳答案 来自SGI'sSTLonThreadSafety:Ifmultiplethreadsaccessasinglecontainer,andatleastonethreadmaypotentiallywrite,thentheuserisresponsibleforensuringmutualexclusionbetweenthethreadsduringthecontaineraccesses.由于您的两个线程都修改了列表,我想您必

C++ 模板 std::vector::iterator 错误

在C++中,我试图获得std::vector::iterator对于我的模板类。但是,当我编译它时,出现错误:errorC2146:syntaxerror:missing';'beforeidentifier'iterator',errorC4430:missingtypespecifier-intassumed.Note:C++doesnotsupportdefault-int.我也收到警告:warningC4346:'std::vector::iterator':dependentnameisnotatype:#includetemplateclassv1{typedefstd::

c++ - 可以安全地存储 list::iterator 供以后使用吗?

假设我有一个列表,其中没有添加或删除新节点。但是,节点可能会被打乱。保存一个迭代器,指向列表中的一个节点,并在以后任意时间访问它是否安全?编辑(后续问题):list::splice()的文档说它从参数列表中删除元素。这是否意味着如果我调用splice,使用相同的列表作为函数的参数,现有的迭代器将失效? 最佳答案 是的。迭代器进入列表的标准受赠者不会失效,除非他们指向(比喻地说)的项目从列表中删除。从这个页面:http://www.sgi.com/tech/stl/List.htmlListshavetheimportantprope

c++ - push_back 如何在 STL vector 中实现?

我在一次采访中被问到这个问题。我回答的点是这样的1)指向当前位置的索引;2)必要时调整大小。谁能详细说明一下? 最佳答案 STLvector有一个size(当前存储元素的数量)和capacity(当前分配的存储空间)。如果size,一个push_back简单地将新元素放在末尾并递增size1.如果size==capacity在push_back之前,分配了一个新的更大的数组(两倍大小是常见的,但这是依赖于实现的afaik),所有当前数据都被复制(包括新元素),并释放旧分配的空间。如果分配失败,这可能会引发异常。操作的复杂性是摊销O(

c++ - vector::emplace_back 与 shared_ptr 的用法

#include#include#includeusingnamespacestd;structBinaryTree{intelement;shared_ptrleft;shared_ptrright;};intmain(){vector>vecBT;//caseIvecBT.emplace_back(newBinaryTree{10,nullptr,nullptr});//caseIIvecBT.emplace_back(shared_ptr(newBinaryTree{20,nullptr,nullptr}));return0;}http://en.cppreference.com

c++ - vector.emplace_back() 和 vector.push_back() 做同样的事情吗?

所以我试图将整数添加到我的vector的背面,并错误地认为push_back()将新数据添加到vector的前面(又名vector[0])。我在Xcode中做了一个测试,并针对emplace_back()测试了push_back()并得到了相同的结果。我以为他们是不同的,但这让我觉得也许他们做同样的事情。如果是这样,为什么vector有不同的方法?这是我的代码,以防我这样做:#include#includeusingnamespacestd;intmain(intargc,constchar*argv[]){//forpush_backvectorpush;push.push_back

c++ - 为什么 reverse_iterator 双重定义其嵌套类型?

似乎迭代器适配器reverse_iterator双重定义了它的大部分嵌套类型。特别是,它公开继承自std::iterator,它公开了iterator_category、value_type、difference_type、指针和引用。除了iterator_category和value_type外,这些都在类定义中再次显式typedef。24.5.1.1类模板reverse_iterator[反向迭代器]namespacestd{templateclassreverse_iterator:publiciterator::iterator_category,typenameiterato