cout 杂记

本文详细解析了C++中的标准流对象cerr、clog及cout的功能差异,包括它们的输出特性、缓冲机制以及如何进行字符串和指针的输出。同时介绍了插入操作符的使用方法,put和write方法的应用场景,以及flush与endl的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. c++里关于cerr,clog,cout三者的区别:
cerr(无缓冲标准错误)-----没有缓冲,发送给它的内容立即被输出
clog(缓冲标准错误)--------有缓冲,缓冲区满时输出
cout-------------------------标准输出
三个都是ostream类定义的输出流对象,
cout是在终端显示器输出,cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl,不论缓冲区是否漫了,都立即输出流中所有数据,然后插入一个换行符.
cerr流对象是标准错误流,指定为和显示器关联,和cout作用差不多,有点不同就是cout
通常是传到显示器输出,但可以被重定向输出到文件,而cerr流中的信息只能在显示器输出.
clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出.  

 

2.插入操作符(<<)

需要注意的是插入操作符能识别的基本类型并不包括string

string是自身又重载了<<

 

3.输出和指针

ostream类为下面的指针类型定义了插入操作符函数:

  • const signed char*
  • const unsigned char *
  • const char*

以上三种输出的都是字符串,如果要输出字符串的首地址,必须使用强制类型转化(void *)

  • void *

对于其他类型的指针,C++将其对应于void*,并打印地址。

 

4.put方法和write方法

put()的原型:ostream & put (char), 用于显示字符,可以这样使用cout.put('a').put('b')

write()的模板原型:basic_ostream<charT, traits> & write(const char_type* s, streamsize n);

write()方法也可以用于数值数据,你可以将数字的地址强制转换为char *

long val = 560031841;

cout.write((char *)&val, sizeof(long));

 

5.flush和endl的区别

flush刷新缓冲区,控制符endl刷新缓冲区,并插入一个换行符。

 

 

set的lower_bound函数是按照从小到大的顺序返回大于或等于给定的第一个元素的迭代器。如果你想要逆序,可以使用set的reverse_iterator来遍历集合并输出元素。你可以参考下面的代码示例: ```cpp #include <iostream> #include <set> int main() { std::set<int> myset = {21, 64, 17, 78, 49}; std::set<int>::reverse_iterator rit; std::cout << "myset contains: "; for (rit = myset.rbegin(); rit != myset.rend(); ++rit) { std::cout << *rit << ' '; } std::cout << '\n'; return 0; } ``` 这段代码首先创建了一个set并初始化了一些元素。然后使用reverse_iterator来逆序遍历set并输出元素。输出结果为:78 64 49 21 17。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [c++ set 的常见操作](https://blog.youkuaiyun.com/qq_45752450/article/details/107459429)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [杂记1:正向反向迭代器,不同stl容器的lower_bound的使用(set,map,vector,arr,pair),数字转字符串](https://blog.youkuaiyun.com/weixin_50816938/article/details/123942734)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值