iostream

丢人笔记:黑科技——使用streambuf加速读入输出

血红的双手。 提交于 2020-03-15 19:42:58
UPD20191125:我发现我又丢人了,sgetc只会读取缓冲区当前字符而不会前移读取位置,想要读取并前移读取位置应该用sbumpc。。。   一般情况下,在C++中,iostream内的cin和cout是比scanf和printf慢的,这主要是为了同时兼容iostream和stdio,iostream与stdio的缓冲区被绑到了一起,以及cin和cout的stream是绑定在一起的,这使得cin和cout有额外的开销   为了提高cin和cout的效率,我们可以取消iostream与stdio的同步,以及cin和cout的stream的绑定: 1 std::ios::sync_with_stdio(false); 2 cin.tie(NULL); 3 cout.tie(NULL);   这样cin与cout就比scanf和printf快了。在本机测试上,iostream甚至比stdio快了6倍左右。然而这样做之后,就不可以将iostream与stdio混用了,然而输入量较大的时候,这种方法仍然无能为力   在stdin中,我们有getchar,想要追求更快的速度,我们有fread   在iostream中我们同样可以达到同样的效率,甚至更快:   首先要获取cin的streambuf: std::streambuf *fb = cin.rdbuf();  

C ++中的'printf'与'cout'

时间秒杀一切 提交于 2020-03-15 10:38:20
在C ++中 printf() 和 cout 什么区别? #1楼 更多差异:“printf”返回一个整数值(等于打印的字符数),“cout”不返回任何内容 和。 cout << "y = " << 7; 不是原子的。 printf("%s = %d", "y", 7); 是原子的。 cout执行类型检查,printf没有。 没有相当于 "% d" iostream #2楼 令我感到惊讶的是,这个问题中的每个人都声称 std::cout 比 printf 更好,即使这个问题只是要求差异。 现在,有一个区别 - std::cout 是C ++,而 printf 是C(但是,你可以在C ++中使用它,就像C中 几乎 所有其他东西一样)。 现在,我会在这里说实话; printf 和 std::cout 都有它们的优点。 真正的差异 可扩展性 std::cout 是可扩展的。 我知道人们会说 printf 也是可扩展的,但是C标准中没有提到这样的扩展(所以你必须使用非标准功能 - 但是甚至不存在常见的非标准功能),并且这样的扩展是一个字母(因此很容易与已存在的格式冲突)。 与 printf 不同, std::cout 完全依赖于运算符重载,因此自定义格式没有问题 - 您所做的就是定义一个子程序,将 std::ostream 作为第一个参数,将您的类型作为第二个参数。 因此,没有命名空间问题

Python框架之Tornado(三)请求

大憨熊 提交于 2020-03-15 09:54:49
概述 本篇就来详细介绍tornado服务器(socket服务端)是如何接收用户请求数据以及如果根据用户请求的URL处理并返回数据,也就是上图的3系列所有步骤,如上图【start】是一个死循环,其中利用epoll监听服务端socket句柄,一旦客户端发送请求,则立即调用HttpServer对象的_handle_events方法来进行请求的处理。 对于整个3系列按照功能可以划分为四大部分: 获取用户请求数据(上图3.4) 根据用户请求URL进行路由匹配,从而使得某个方法处理具体的请求(上图3.5~3.19) 将处理后的数据返回给客户端(上图3.21~3.23) 关闭客户端socket(上图3.24~3.26) 3.1、HTTPServer对象的_handle_events方法 此处代码主要有三项任务:   1、 socket.accept() 接收了客户端请求。   2、创建封装了客户端socket对象和IOLoop对象的IOStream实例(用于之后获取或输出数据)。   3、创建HTTPConnection对象,其内容是实现整个功能的逻辑。 class HTTPServer(object): def _handle_events(self, fd, events): while True: try: #======== 获取客户端请求 =========# connection,

Output unicode strings in Windows console app

大兔子大兔子 提交于 2020-03-04 15:35:51
问题 Hi I was trying to output unicode string to a console with iostreams and failed. I found this: Using unicode font in c++ console app and this snippet works. SetConsoleOutputCP(CP_UTF8); wchar_t s[] = L"èéøÞǽлљΣæča"; int bufferSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL); char* m = new char[bufferSize]; WideCharToMultiByte(CP_UTF8, 0, s, -1, m, bufferSize, NULL, NULL); wprintf(L"%S", m); However, I did not find any way to output unicode correctly with iostreams. Any

C++标准库之IO库(一)

拈花ヽ惹草 提交于 2020-02-22 05:25:32
概述 C++语言与C语言一样,语言本身并不提供输入输出的支持,它们实现输入输出都是通过标准库来完成的。C语言的标准库提供一系列可以用来实现输入输出的函数,C++标准库则提供一系列类和对象来完成输入输出的功能,并且提供了流的概念,标准库中的IO类都是流概念的类。C++标准库中80%的内容属于STL,而IO库并不属于这80%。IO库体现的是面向对象的思想,但是有可能IO类也是基于模板实现的。 IOStreams基本概念 C++ IO由流(一种特殊的类的对象)完成,所谓的流是指按时间顺序生成的字符序列。按照面向对象的思想,流是由某个类别(类)定义出来的具有特定性质的对象。输出操作被定义为数据流入stream,输入操作被定义为数据流出stream。比较基础的类为istream类和ostream类,分别表示输入流和输出流。 全局性的stream对象 IOStream程序库定义了数个型别为istream和ostream的全局对象,它们对应于标准的IO通道(channels),分别是cout,cin,clog,cerr。可以使用重定向的机制使不同的全局对象指向不同的位置。 Stream操作符 利用操作符重载的机制,stream类可以将<<和>>这两个移位操作符重载为负责输入输出的操作符。 操控器 控制stream类进行某些操作,如endl。将std::endl赋给输出流会打印’\n’

第二章 开始学习c++

点点圈 提交于 2020-02-17 15:10:16
第二章 开始学习c++ 2.1 进入c++ 2.1.1 基本知识 1.c++对大小写敏感,区分大小写 2.c语言使用printf(),scanf()等输入输出,c++可以使用,但需包含stdio.h头文件。 3. #include:预处理器编译指令 int main():函数头 using namespace:编译指令 2.1.2 main() 函数 1.c++句法要求main() 函数的定义以函数头int main() 开始 c++函数可被其他函数激活和调用,函数头描述了函数与调用它的函数之间的接口。 位于函数名前面的部分叫做函数返回类型,它描述的是从函数返回给调用它的函数的信息,函数名后括号中的部分叫做形参列表;他描述的是从调用函数传递给被调用的函数的信息。 通常,main()被启动代码调用,而启动代码是由编译器添加到程序中的,是程序和操作系统之间的桥梁。事实上,该函数头描述的是main()和操作系统之间的接口 main()函数可以给调用它的函数返回一个整数值,且不从调用它的函数哪里获得任何信息。 2.main() 函数若无返回语句,则默认为return 0; c++程序必须包含一个名为main() 的函数 2.1.3 c++预处理器和iostream文件 c++程序使用输入输出工具,要使用这样两行代码 #include using namespace std; c+

Reading txt multiple times

♀尐吖头ヾ 提交于 2020-02-05 06:48:08
问题 I have a program which uses a text_file to store lots of numbers. When I have to load those numbers I have to load it with 2500 numbers a time. I have a while loop to load it again and again and again... Now, the problem occurs in the while loop I guess. ifstream mfile("abc.txt", ifstream::out); if(mfile.is_open()) { getline(mfile, b); char* ch = new char[b.length() + 1]; strcpy(ch, b.c_str()); result = atof(strtok (ch,";")); while(i<125) { cout<< strtok (NULL,";")<<" "; i++; } i=0; } else {

Using std::getline() to read a single line?

♀尐吖头ヾ 提交于 2020-02-05 04:24:45
问题 My goal is to prompt user to enter a message / sentence and then print it out on the screen, using getline() . The following is two different attempts I have tried out. First Attempt: #include <iostream> #include <iomanip> #include <cstring> using namespace std; int main(){ chat message[80]; cout << "\n what is your message today?" << endl; cin.getline( message, 80); // Enter a line with a max of 79 characters. if( strlen( message) > 0) // If string length is longer than 0. { for( int i=0;

Why do we get the build error “error C2065: 'ostringstream' : undeclared identifier” & How to fix this?

五迷三道 提交于 2020-02-04 09:35:23
问题 Hi I am compilinig a C++ solution in VS2008. ostringstream strout; I am getting the compilation error " error C2065: 'ostringstream' : undeclared identifier ". I feel I have included all the necessary header files. Can anyone kindly let me know how to fix this error (What all header files to include) ? Also I am getting a strange error like "error C2146: syntax error : missing ';' before identifier 'strout' " at the same line. Whereas I know that I havent missed ";" semi-colon @ the line whre

Why do we get the build error “error C2065: 'ostringstream' : undeclared identifier” & How to fix this?

安稳与你 提交于 2020-02-04 09:34:06
问题 Hi I am compilinig a C++ solution in VS2008. ostringstream strout; I am getting the compilation error " error C2065: 'ostringstream' : undeclared identifier ". I feel I have included all the necessary header files. Can anyone kindly let me know how to fix this error (What all header files to include) ? Also I am getting a strange error like "error C2146: syntax error : missing ';' before identifier 'strout' " at the same line. Whereas I know that I havent missed ";" semi-colon @ the line whre