Questions tagged «iostream»

C ++ iostream库是一个面向对象的库,它使用流提供输入和输出功能。iostreams类支持内置类型的类型安全I / O,并且可以通过重载>>和<<操作符来扩展为支持用户定义的类型。

10
为什么在C ++中从stdin读取行比Python慢​​得多?
我想比较使用Python和C ++从stdin读取的字符串输入的行数,并且震惊地看到我的C ++代码运行速度比等效的Python代码慢一个数量级。由于我的C ++生锈,而且我还不是专家Pythonista,因此请告诉我我做错了什么还是误解了什么。 (TLDR回答:包括以下声明:cin.sync_with_stdio(false)或仅使用fgets代替。 TLDR结果:一直滚动到我的问题的底部,然后查看表格。) C ++代码: #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; int main() { string input_line; long line_count = 0; time_t start = time(NULL); int sec; int lps; while (cin) { getline(cin, input_line); if (!cin.eof()) line_count++; }; sec = (int) time(NULL) - start; cerr &lt;&lt; "Read …


12
C ++:“ std :: endl”和“ \ n”
许多C ++书籍都包含这样的示例代码... std::cout &lt;&lt; "Test line" &lt;&lt; std::endl; ...所以我也总是这样做。但是,我已经从工作的开发人员那里看到了很多这样的代码: std::cout &lt;&lt; "Test line\n"; 是否有技术上的理由要优先于另一个,还是仅仅是编码风格的问题?



5
如何正确重载ostream <<操作符?
我正在用C ++写一个小的矩阵库,用于矩阵运算。但是我的编译器抱怨,以前没有。这段代码在架子上放置了6个月,在此之间,我将计算机从debian etch升级到lenny(g ++(Debian 4.3.2-1.1)4.3.2),但是在具有相同g ++的Ubuntu系统上,我遇到了同样的问题。 这是我的矩阵类的相关部分: namespace Math { class Matrix { public: [...] friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp; stream, const Matrix&amp; matrix); } } 和“实现”: using namespace Math; std::ostream&amp; Matrix::operator &lt;&lt;(std::ostream&amp; stream, const Matrix&amp; matrix) { [...] } 这是编译器给出的错误: matrix.cpp:459:错误:'std :: ostream&Math :: Matrix :: operator &lt;&lt;(std :: ostream&,const …

11
如何以二进制形式打印(使用cout)数字?
我正在上一本关于操作系统的大学课程,我们正在学习如何从二进制转换为十六进制,从十进制转换为十六进制,等等。今天,我们刚刚学习了如何使用二进制补码(〜number)将有符号/无符号数字存储在内存中。 +1)。 我们有两个练习在纸上做,我希望能够在将作业提交给老师之前验证我的答案。我为前几个练习编写了一个C ++程序,但现在我对如何验证以下问题的答案感到困惑: char a, b; short c; a = -58; c = -315; b = a &gt;&gt; 3; 我们需要显示的二进制表示在内存中的a,b和c。 我已经在纸上做完了,它给了我以下结果(所有二进制表示形式都存储了两个补数之后的数字): a = 00111010(这是一个字符,所以1个字节) b = 00001000(这是一个字符,所以1个字节) c = 11111110 11000101(很短,所以2个字节) 有没有办法验证我的答案?在C ++中是否有一种标准的方法可以显示数字在内存中的二进制表示形式,还是我必须自己对每个步骤进行编码(计算二者的补码,然后转换为二进制)?我知道后者不会花很长时间,但是我很好奇是否有标准的方法可以这样做。

4
C ++标准是否要求iostream的性能较差,或者我只是在处理较差的实现?
每当我提到C ++标准库iostream的性能下降时,我都会感到一阵怀疑。但是,我的探查器结果显示,大量时间花费在iostream库代码(完整的编译器优化)上,从iostream切换到特定于操作系统的I / O API和自定义缓冲区管理确实提高了一个数量级。 C ++标准库正在做什么额外的工作,它是标准所必需的,并且在实践中是否有用?还是某些编译器提供了与手动缓冲区管理竞争的iostream实现? 基准测试 为了使事情顺利进行,我编写了一些简短的程序来练习iostream的内部缓冲: 将二进制数据放入ostringstream http://ideone.com/2PPYw 将二进制数据放入char[]缓冲区http://ideone.com/Ni5ct vector&lt;char&gt;使用http://ideone.com/Mj2Fi将二进制数据放入back_inserter 新功能:vector&lt;char&gt;简单的迭代器http://ideone.com/9iitv 新功能:将二进制数据直接放入stringbuf http://ideone.com/qc9QA 新功能:vector&lt;char&gt;简单的迭代器加边界检查http://ideone.com/YyrKy 请注意,ostringstream和stringbuf版本运行的迭代次数较少,因为它们要慢得多。 在ideone上,其ostringstream速度比std:copy+ back_inserter+ 慢3倍std::vector,比memcpy在原始缓冲区中慢15倍。当我将实际应用程序切换到自定义缓冲时,这感觉与前后分析一致。 这些都是内存中的缓冲区,因此不能将iostream的缓慢归咎于磁盘慢的I / O,过多的刷新,与stdio的同步,或者人们用来掩盖C ++标准库的缓慢的任何其他事情。 iostream。 很高兴看到其他系统上的基准测试以及对常见实现的注释(例如gcc的libc ++,Visual C ++,Intel C ++)以及该标准要求多少开销。 此测试的原理 许多人正确地指出,iostream更常用于格式化输出。但是,它们也是C ++标准提供的唯一用于二进制文件访问的现代API。但是,对内部缓冲进行性能测试的真正原因适用于典型的格式化I / O:如果iostream无法为磁盘控制器提供原始数据,那么当它们负责格式化时又如何保持正常运行呢? 基准时间 所有这些都是外部(k)循环的每次迭代。 在ideone上(gcc-4.3.4,未知的操作系统和硬件): ostringstream:53毫秒 stringbuf:27毫秒 vector&lt;char&gt;和back_inserter:17.6毫秒 vector&lt;char&gt; 普通迭代器:10.6毫秒 vector&lt;char&gt; 迭代器和边界检查:11.4毫秒 char[]:3.7毫秒 在我的笔记本电脑上(Visual C …

15
您能解释一下流的概念吗?
我知道流是字节序列的表示。每个流都提供用于将字节读写到其给定的后备存储的方法。但是流的意义是什么?为什么我们与之交互的后备商店本身不存在? 不管出于什么原因,这个概念都无法满足我的需求。我读了很多文章,但我想我需要一个类比。

11
谁设计/设计了C ++的IOStreams,并且按照当今的标准,它仍然被认为设计良好吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 首先,似乎我在征求主观意见,但这并不是我所追求的。我很想听听有关该主题的一些有充分根据的论点。 为了对如何设计现代流/序列化框架有所了解,我最近得到了Angelika Langer和Klaus Kreft撰写的《Standard C ++ IOStreams and Locales》一书的副本。我认为,如果IOStreams设计不当,那么它就不会首先进入C ++标准库。 在阅读了本书的各个部分之后,我开始怀疑IOStreams是否可以从总体体系结构的角度与STL进行比较。阅读例如对Alexander Stepanov(STL的“发明人”)的采访,以了解有关STL的一些设计决策。 特别令我惊讶的是: 谁来负责IOStreams的总体设计似乎是个未知数(我很想阅读有关此的一些背景信息-有人知道好的资源吗?); 一旦你钻研输入输出流,例如眼前表面之下,如果你想输入输出流用自己的类扩展,你会得到一个接口具有相当神秘和扑朔迷离的成员函数的名称,例如getloc/ imbue,uflow/ underflow,snextc/ sbumpc/ sgetc/ sgetn,pbase/ pptr/ epptr(和有甚至更糟的例子)。这使得理解整体设计以及单个零件如何协作变得更加困难。即使我上面提到的那本书没有帮助那多(恕我直言) 因此,我的问题是: 如果你要判断今天的软件工程标准(如果确实是对这些任何普遍同意),将C ++的输入输出流仍然被认为是经过精心设计?(我不想通过通常认为过时的方法来提高软件设计技能。)
127 c++  iostream 

7
操作后恢复std :: cout的状态
假设我有这样的代码: void printHex(std::ostream&amp; x){ x&lt;&lt;std::hex&lt;&lt;123; } .. int main(){ std::cout&lt;&lt;100; // prints 100 base 10 printHex(std::cout); //prints 123 in hex std::cout&lt;&lt;73; //problem! prints 73 in hex.. } 我的问题是,cout从函数返回后,是否有任何方法可以将状态“恢复” 到其原始状态?(有点像std::boolalpha和std::noboolalpha..)? 谢谢。
105 c++  iostream 

3
为什么std :: getline()在格式化提取后会跳过输入?
我有以下代码提示用户输入名称和状态: #include &lt;iostream&gt; #include &lt;string&gt; int main() { std::string name; std::string state; if (std::cin &gt;&gt; name &amp;&amp; std::getline(std::cin, state)) { std::cout &lt;&lt; "Your name is " &lt;&lt; name &lt;&lt; " and you live in " &lt;&lt; state; } } 我发现该名称已成功提取,但状态尚未提取。这是输入和结果输出: Input: "John" "New Hampshire" Output: "Your name is John and …
105 c++  input  iostream  istream  c++-faq 

8
C ++中的iostream标头的cout,cerr,clog有什么区别?什么时候使用哪个?
我尝试研究和之间的区别cout,cerr并clog在互联网上找不到完美的答案。我仍然不清楚何时使用哪个。谁能通过简单的程序向我解释,并说明何时使用哪种程序的理想情况? 我访问了该站点,该站点在cerr和上显示了一个小程序clog,但是在那获得的输出也可以使用来获得cout。因此,我对每个人的确切用法感到困惑。
97 c++  iostream  cout  clog 

4
运算符<<必须正好接受一个参数
啊 #include "logic.h" ... class A { friend ostream&amp; operator&lt;&lt;(ostream&amp;, A&amp;); ... }; 逻辑文件 #include "a.h" ... ostream&amp; logic::operator&lt;&lt;(ostream&amp; os, A&amp; a) { ... } ... 当我编译时,它说: std :: ostream&逻辑:: operator &lt;&lt;(std :: ostream&,A&)'必须仅接受一个参数。 问题是什么?

7
如何一次一行一行地读取整个文本文件?
我在一个介绍文件的教程中(如何读写文件) 首先,这不是家庭作业,这只是我寻求的一般帮助。 我知道如何一次阅读一个单词,但我不知道如何一次阅读一行或如何阅读整个文本文件。 如果我的文件包含1000个单词怎么办?阅读每个单词是不切实际的。 我的文本文件名为(读取)包含以下内容: 我喜欢玩游戏,喜欢阅读,我有两本书 到目前为止,这是我已经完成的工作: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main (){ ifstream inFile; inFile.open("Read.txt"); inFile &gt;&gt; 有没有可能一次读取整个文件的方法,而不是分别读取每一行或每个单词?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.