草庐IT

ostream_iterator

全部标签

c++ - 接受 STL_container_type<string>::iterator 的模板化参数

我有一个函数,其中有一个包含字符串的容器(例如vector、set、list),并且给定一个开始迭代器和一个结束迭代器,通过迭代器范围处理字符串。目前函数声明如下:templatevoidProcessStrings(ContainerIterbegin,ContainerIterend);现在这将接受任何符合实现operator*的隐式接口(interface)的类型,前缀operator++以及函数体中的任何其他调用。我真正想做的是像下面这样明确限制输入量的定义(伪代码警告):template::iterator>voidProcessStrings(Container::iter

c++ - 将 std::pair 迭代器转换为 boost::iterator_range

我有一个std::multimap,我想从equal_range创建一个boost::iterator_range。我在文档中找不到简单的方法,所以我尝试了以下方法:typedefstd::multimapMap;Mapmap;...boost::iterator_ranger(map.equal_range(2));令人惊讶的是,它有效(使用GCC4.1.2)。我很好奇它是如何工作的。我发现iterator_range构造函数没有重载可以执行此操作,并且multimap::iterator_range显然没有可以返回Boost范围的重载。 最佳答案

c++ - 如何将 boost::iostreams::null_sink 用作 std::ostream

我想根据运行时给出的标志使我的输出详细/非详细。我的想法是,构建一个依赖于标志的std::ostream,例如:std::ostreamout;if(verbose){out=std::coutelse{//Redirectstdouttonullbyusingboost'snull_sink.boost::iostreams::stream_buffernull_out{boost::iostreams::null_sink()};//Somehowconstructastd::ostreamfromnullout}现在我坚持从这样一个boost流缓冲区构建一个std::ostrea

c++ - 微优化 : iterating with local variable vs. 类成员

我认为如果我将迭代变量声明一次作为类成员,我会节省一些时间:structFoo{inti;voidmethod1(){for(i=0;i然而,这似乎快了20%structFoo{voidmethod1(){for(inti=0;i在这段代码中voidloop(){//Arduinoloopsfoo.method1();foo.method2();}您能解释一下性能差异吗?(我需要在Arduino上运行许多简单的并行“进程”,这种微优化会产生影响。) 最佳答案 当您在循环内声明循环变量时,它的范围非常狭窄。编译器可以随时将其保存在寄存

c++ - 制作 C++ 类 "Showable"(字符串、ostream)的最佳实践

我有一个值语义类,我希望它在与Haskells相同的意义上是“可显示的”Show类,或者Python提供了一个通用的__str__()功能。在C++中:我可以重载operator这样我就可以将我的类(class)输出到例如cout我可以重载operatorstd::string()所以我的类转换为std::string我可以重载operatorconstchar*()所以我的类转换为constchar*。我可以写一个str()成员(member),或to_string(...)免费功能这些功能中的每一个都可以根据另一个来定义。一个选项比其他选项更好吗?这些都是选项吗?给定c++11/1

c++ - 在 vs2008 SP1 中禁用检查迭代器时出现问题 (_HAS_ITERATOR_DEBUGGING=0)

当我尝试禁用已检查的迭代器时,在Debug模式下运行vs2008SP1时遇到了一些问题。以下程序重现了该问题(字符串析构函数崩溃):#define_HAS_ITERATOR_DEBUGGING0#includeintdo_stuff(std::stringconst&text){std::string::const_iteratori(text.end());return0;}intmain(){std::ostringstreamos;os我找到了similarpost在gamdev.net上讨论了在vs2005中遇到这个问题。该帖子中的示例程序在2008SP1上按原样为我编译-但是

c++ - 让 C++ 类充当自定义 ostream、sstream

我有一个C++类MyObject我希望能够像向osstream一样提供这些数据(但与直接sstream不同,输入数据以特殊方式格式化)。我似乎无法弄清楚如何为MyObject重载运算符以吃掉给它的输入。classMyObject{public:ostringstreams;FEEDME};intmain(){MyObjectobj;obj.FEEDME我想要它,所以每个输入的项目都被::包围因此在给定的示例中,s=":Hello::12345"应该是最终结果。我的问题是,我怎样才能告诉对象什么时候有,把::放在某物周围。这可能吗? 最佳答案

c++ - 关于 ofstream 的模棱两可的警告,但不是 ostream 的警告。有什么不同?

这不重要。但是我很好奇这个警告什么时候出现。我真正的问题是为什么ostream和ofstream被区别对待。structTest{inty;Test(intk):y(k){}};通过这个简单的结构,编译器看到一个int可以转换为Test.因此,我收到此代码的警告:std::ofstream&operator当它看到os它不知道我是要压入名为t.y的int,还是先将int转换为Test再压入。这看起来很奇怪,你会认为它更喜欢未转换的int重载ofstream&operator.g++(Ubuntu4.4.3-4ubuntu5)4.4.3:template_expl.cpp:Infunct

c++ - ostream : prefix a positive number with a space

在C中,空格可以包含在printf格式化标志中,这会导致正数以空格为前缀。这是对齐有符号值的有用功能。我不知道如何在C++中做同样的事情。在C中:doubled=1.2;printf("%f\n",d);printf("%+f\n",d);printf("%f\n",d);产生:1.2+1.21.2使用ostream,我可以做前两个,但我如何做第三个?intd=1.2;std::cout编辑:关于我是否只想在我的所有值前加上一个空格似乎有些困惑。我只想在positive值前加上一个空格,类似于a)像printf空格标志所做的和b)类似于showpos所做的,除了空格而不是'+'。例如:

c++ - 如何使用两个函数,一个返回迭代器,另一个返回 const_iterator

所以我有一个名为find的函数,它有两个版本:templatetypenamebtree::iteratorbtree::find(constT&elem){//Implementation}另一个是const_iterator版本:templatetypenamebtree::const_iteratorbtree::find(constT&elem)const{//Implementation}在我做的时候在我的测试文件中btree::iteratorit=myTree.find('M');一切正常,但是当我使用const_iterator版本时:btree::const_iter