草庐IT

ostream_iterator

全部标签

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++ - 简单来说,ostream中flush()的作用是什么

定义取自:http://www.cplusplus.com/reference/iostream/ostream/flush/,目前尚不清楚为什么该功能存在,以及您将使用它的目的。为什么不在每次写入流时调用flush()? 最佳答案 很可能,flush这个词正是来自您在现实生活中要冲洗的东西。厕所……所以让我们尝试用厕所做个比喻:每次将新的水滴入碗中时都要冲洗非常耗时,而且完全浪费水。在每个人都在努力保护环境的今天,这是一个大问题。那么你会怎么做呢?您可以通过将其全部保存并在最后刷新一次来缓冲它。如果出于某种原因,您总是可以在未完成

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++ - 如何从 C++ std::basic_ostream 派生并使 << 运算符虚拟?

我正在编写一个具有各种消息输出的类。我想让这个类通用并且独立于平台,所以我正在考虑将basic_ostream引用传递给它,它可以将所有消息转储到流中。通过这样做,如果类在控制台程序中使用,我可以将std::cout传递给它并显示在控制台窗口中。或者我可以将派生的ostream传递给它,并将消息重定向到某些UI组件,例如列表框?唯一的问题是数据插入器operator不是虚函数。如果我将派生类引用传递给它,则只会调用basic_ostream有解决办法吗? 最佳答案 NanZhang自己的回答,最初作为问题的一部分发布:跟进:好的,这

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实现删除(好像这不是不言而喻的)。我想标准委员会已经考虑了一些实现(或手头现有的实现),这需要删除才能采

临时 ostream 对象的 C++ 问题

我想改造这个工作代码:ofstreamoutfile("my_file.txt");copy(v.begin(),v.end(),ostream_iterator(outfile));进入这个:copy(v.begin(),v.end(),ostream_iterator(ofstream("my_file.txt")));换句话说,我使用了ofstream对象的“匿名”或未命名版本。两个问题:(1)为什么第二次尝试失败?(2)第二次尝试在风格上是否更好,还是在C++中更好地保​​留所有内容的显式命名?我来自Python背景,其中对象始终是动态创建的。谢谢!!