草庐IT

col_iterator

全部标签

c++ - find_if 不适用于 const_iterator

我写了这个程序://splitsasentenceintowords#include#include#include#include"spacefunc.h"usingstd::string;usingstd::cout;usingstd::endl;usingstd::find_if;intmain(){typedefstring::const_iteratoriter;stringinput="Thisisme";iteri=input.begin();while(i!=input.end()){iterj;i=find_if(i,input.end(),notspace);j=f

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++ 二进制文件和迭代器 : 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::set<K, C, A>::erase 不采用 const_iterator?

看来,根据ISO148822003(又名C++的神圣标准)std::set::erase需要iterator作为参数(不是const_iterator)from23.3.3[2]voiderase(iteratorposition);可能还值得注意的是,在我的VS2008附带的STL实现中,删除需要一个const_iterator。当我试图用另一个编译器编译我的代码时,这导致了一个不愉快的惊喜。现在,因为我的版本需要const_iterator,然后可以用const_iterator实现删除(好像这不是不言而喻的)。我想标准委员会已经考虑了一些实现(或手头现有的实现),这需要删除才能采

c++:const_iterator 和 for-each 循环

我正在用C++实现自己的Vector。这是一个由两部分组成的问题。第1部分:尝试遍历Vector时,我的begin()和end()迭代器无法处理输入参数。下面是我的整个Vector.h实现:classiterator{public:typedefstd::random_access_iterator_tagiterator_category;typedefTvalue_type;Vector*ptr;uint64_tposition;COMLINKslave;voidinit(void){ptr=nullptr;position=0;}voidcopy(constiterator&i)