草庐IT

pairing_iterator

全部标签

c++ - 'iter' 的名称查找更改为新的 ISO 'for' 范围

我正在尝试编译下面的两个文件,但从编译器那里得到一条错误消息:gcc4.3.3(Linux)错误在签名行:LINEWITHERROR我做错了什么,我应该怎么改?路易斯.....................................$g++-cb.hb.cppb.cpp:Infunction'voidcalcularDesempPop(std::vector>&)':b.cpp:19:error:namelookupof'iter'changedfornewISO'for'scopingb.cpp:17:error:usingobsoletebindingat'iter'...

c++ - STL 算法和 const_iterators

今天我写了一个小谓词来查找容器中的匹配符号。但是我遇到了一个问题:我想在类的常量方法内的std::find_if调用中使用这个谓词,在属于这个类。但我刚刚注意到std::find和std::find_if都不能对const_iterators进行操作!我检查了一些C++引用资料,似乎没有std::find或std::find_if版本接受/返回const_iterators。我只是不明白为什么,因为据我所见,这些算法无法修改迭代器引用的对象。这是在SGI实现中记录std::find的方式:Returnsthefirstiteratoriintherange[first,last)suc

c++ - 使用 std::deque::iterator(在 C++ STL 中)搜索和删除某些元素

我在调用以下代码时遇到问题:#includeusingnamespacestd;dequedeq={0,1,2,3,4,5,6,7,8};for(autoit=deq.begin();it!=deq.end();it++){if(*it%2==0)deq.erase(it);}这导致了段错误。在查看问题后,我发现问题在于STL管理双端队列迭代器的方式:如果被删除的元素更接近双端队列的末尾,用于指向被删除元素的迭代器现在将指向NEXT元素,但不是前一个元素为vector::iterator做。我知道从it!=deq.end()修改循环条件至it可能会解决这个问题,但我只是想知道是否有一种

c++ - iterator_traits SFINAE 友好性

阅读excerpt时来自cppreferenceIfIteratordoesnothavethefivemembertypesdifference_type,value_type,pointer,reference,anditerator_category,thenthistemplatehasnomembersbyanyofthosenames(std::iterator_traitsisSFINAE-friendly)我自然而然地认为这意味着每个成员类型在迭代器本身中定义时就被定义了。但是你瞧,这实际上意味着如果定义了所有五个,那么它们就被定义了。structdefined{usi

c++ - 使用 Pair 模板实现 List 模板

我正在尝试使用我自己的对类来实现单向链表模板类。我这样做是为了刷新我的C++技能,所以这就是我不只是使用STL的原因。我的列表模板由单一类型参数化:templateclassLinkedList{private:Pair*>*_head;};问题是我希望_head是一对,其第二个元素是同一类型的一对。这个想法是_head.first是元素,_head.second是指向列表其余部分的指针,如果它是最后一个元素,则为NULL。有没有办法使用引用自身的模板化类型? 最佳答案 也许你正在尝试做这样的事情:templateclassLink

c++ - 如何分配一个 std::pair 其中一个组件类型为 const?

我正在尝试编写一个与std::map兼容的关联容器。为此,我必须创建一个插入方法,该方法以std::pair的形式接受一个新项,其中第一个组件是const类型。例如:std::pairp.我遇到的问题是这样的对象不能分配给另一个对象。因此,在我的MapCompatibleContainer的内部代码中,我无法将新对复制到私有(private)变量(std::vector)。我该如何解决这个问题?谢谢 最佳答案 正如您所说,您不能分配给const对象。标准容器通过分配原始内存并就地构造对象来解决这个问题。复制构造仍然有效。此外,关联容

C++ 二进制文件和迭代器 : getting away with a 1:1 using ifstreambuf_iterator?

Thisanswer指出C++不太适合二进制文件的迭代这一事实,但这是我现在需要的,简而言之,我需要以“二进制”方式对文件进行操作,是的,所有文件都是二进制的,即使是.txt的,但我正在写一些对图像文件进行操作的东西,所以我需要读取结构良好的文件,数据是否以特定方式排列。我想读取数据结构中的整个文件,例如std::vector所以我几乎可以立即关闭文件并处理内存中的内容,而无需再关心磁盘I/O。目前,根据标准库对文件执行完整迭代的最佳方法是std::ifstreamifs(filename,std::ios::binary);for(std::istreambuf_iterator>i

c++ - 可能返回值也可能不返回值的函数的 Iterator-reducer 模式

以下函数在每个元素上应用仿函数并减少返回值:templateRED::TYPEforAllElements(FCTfunctor,REDreducer){for(/*alleleminelements*/){reducer(functor(elem));}returnreducer.value;}现在,有时我可能希望只对所有元素调用functor,而不减少任何东西。基本上,我想要这样的东西:classFunctorThatReturnsNothing{voidoperator()(Eleme){//dosomething,returnnothing...}}classDummyRedu

C++如何将ifstream内容(来自文件)分配给具有偏移量的字符串(istreambuf_iterator)

我尝试将二进制文件内容的一部分读入字符串。为什么是字符串?我的消息协议(protocol)(使用protobuf)需要这个。下面的效果很好:std::string*data=newstd::string();std::ifstreamifs("C:\\data.bin",std::ios::binary);data->assign((std::istreambuf_iterator(ifs)),(std::istreambuf_iterator()));但这是为了从头到尾读取文件。我只想阅读给定位置的部分。例如从位置字节10开始:std::string*data=newstd::str

c++ - 为什么 std::pair 不可构造?

以下代码:#include#include#include#includeusingnamespacestd;structFoo{std::strings;inti;};intmain(){cout::value>::value::value>::value使用g++-std=c++11编译时产生以下输出:truefalsetruetrue为什么是std::pair不能抛出构造,而Foo是,为什么它不可构造? 最佳答案 有趣的是,noneoftheconstructorsisdeclarednoexceptunderanycondi