cout

cout、cerr、clog有何区别?

强颜欢笑 提交于 2020-02-28 17:11:51
windows+vs情况下:在控制台上,cout能重定向到文件,cerr和clog不能。输出重定向到文件实际上就是一个管道的一头连输出流,另一头连文件输入流 cout具有自己的缓冲区,当缓冲区满或遇到endl会刷新终端(默认是屏幕);cerr没有缓冲区,直接刷新终端 cout的写缓存操作和系统刷新终端的操作是异步的,所以会存在当程序崩溃的情况下按代码执行顺序应该输出的内容可能只输出了一部分,而不是全部输出,因为这个时候程序已经崩溃了 cout、printf其实是写缓存。这就存在一个问题,当缓冲区满了并且没有被消耗的情况下,cout、printf会被阻塞。如当程序A通过管道将cout的通过管道重定向到程序B的时候,若缓冲区满了,但程序B一直不消耗缓冲区,那么程序A中的cout会阻塞知道程序B消耗了缓冲区为止 来源: oschina 链接: https://my.oschina.net/u/1257449/blog/304064

泛化动态数组

我只是一个虾纸丫 提交于 2020-02-28 14:26:44
泛化动态数组 动态数组的核心思想是在存储数据时动态的管理数组元素占用的内存,通过调用动态数组的类方法来对数组中的数据进行 增删改查 操作。最初我们为数组申请10个元素的空间,放我们不断向数组中添加数据时,会自动的申请更大的空间(这里申请的是原本容量的1.5倍,用的是移位操作),将原来内存块的数据拷贝到新的更大的内存块中。当我们删除数据,当空闲内存是总容量的一半且不小于最小容量(10)时,将自动对数组内存缩容操作。 抽向数据类型(ADT) :(linearList.h) /************************************************************************* > File Name : linearList.h > Author : Harold > Mail : 2106562095@qq.com > Github : www.github.com/Haroldcc > Created Time : 2020年02月26日 11时02分58秒 ************************************************************************/ /***** 线性表的抽象定义 *****/ # ifndef LINEARLIST_H # define LINEARLIST_H #

泛型单链表

放肆的年华 提交于 2020-02-28 14:22:14
泛型单链表 单链表将每个数据分为节点,每个节点存储数据和指向下一个节点的指针。这样数据就不用在内存中使用连续的存储空间,有更大的灵活性。 这里将单链表分为节点类(Node)和链表类(singleLinkedList),由于链表类需要访问到Node类的数据,因此将Node类的数据声明为 public ,也可以将链表类声明为节点类的友元类。 抽向数据类型(ADT) :(linearList.h) /************************************************************************* > File Name : linearList.h > Author : Harold > Mail : 2106562095@qq.com > Github : www.github.com/Haroldcc > Created Time : 2020年02月26日 11时02分58秒 ************************************************************************/ /***** 线性表的抽象定义 *****/ # ifndef LINEARLIST_H # define LINEARLIST_H # include <iostream> template < typename

利用C++写一个简单的贪吃蛇小游戏

别说谁变了你拦得住时间么 提交于 2020-02-28 05:22:54
首先,非常感谢白家名大佬 参考 提供的思路与方法,非常感谢! 首先写一个给光标定位的函数 void gotoxy(int x, int y) //光标定位 { COORD pos = { x,y }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } 这个函数需要用windows.h头文件,能把光标移动到指定的坐标位置,参考: 光标定位 有了这个函数,就可以在指定位置生成蛇头,蛇身以及食物了。 贪吃蛇主要由蛇,食物与墙壁组成。 这里将控制台窗口作为墙壁,通过设置控制台窗口来形成贪吃蛇的墙。 通过系统命令可以: system("mode con cols=a lines=b "); //设置控制台窗口大小 system("title xxxxxx"); //设置控制台的标题 这里设置窗口大小为88*28,并将标题改为贪吃蛇。 然后设计一个食物的类 利用刚才定义好的gotoxy函数即可在指定位置生成食物 gotoxy(x, y); //在确认好的位置输出食物 cout << "★"; 但是为了让食物能够随机生成,所以需要利用rand()函数 函数介绍 因为我们设置的食物★在控制台中所占位置为2*2的,所以88*28的控制台食物的x最大为86,y最大为24. 所以食物类: //食物类 class Food

C++ Primer Answer ch04

自作多情 提交于 2020-02-28 03:18:02
4.1 #include <iostream> using namespace std; int main() { cout << 5 + 10 * 20 / 2;//105 return 0; } 4.2 #include <iostream> #include <vector> using namespace std; int main() { vector<int> vec = {1, 3, 5}; cout << *vec.begin() << ' '; cout << *(vec.begin()) << ' '; cout << *vec.begin() + 1 << ' '; cout << (*(vec.begin())) + 1; return 0; } 4.3 可以。操作数的求解顺序通常对结果没什么影响,只有当二元操作符的两个操作数涉及同一对象,并改变对象的值时,操作数的求解顺序才会影响计算结果。实现效率的提高能使使用编译器的程序受益。 4.4 #include <iostream> using namespace std; int main() { cout << 12 / 3 * 4 + 5 * 15 + 24 % 4 / 2;//91 return 0; } 4.5 #include <iostream> using namespace std; int

c++中using 关键字

我的梦境 提交于 2020-02-27 20:00:52
作用 1.在当前文件中引入命名空间,比如using namespace std。 2.等效于typedef的作用,该方法是在c++11中引入的。 比如: using uVec = std :: vector < int > ; typedef std :: vector < int > tVec ; int main ( ) { int a [ 3 ] = { 1 , 2 , 3 } ; //v1,v2,v3达到的效果是一样的 uVec v1 ( a , a + 3 ) ; tVec v2 ( a , a + 3 ) ; vector < int > v3 ( a , a + 3 ) ; for ( int i = 0 ; i < 3 ; i ++ ) cout << "v1:" << v1 [ i ] << " v2:" << v2 [ i ] << " v3:" << v3 [ i ] << endl ; } 3.让父类同名函数在子类中以重载方式使用(参考effective c++item33): 隐藏父类的名称 子类中重写(override)与父类方法同名的方法,将会隐藏父类中所有同名的重载方法。例如: class Base { public : void fun ( ) { cout << "Base do something" << endl ; } void fun (

C++数组,sort

寵の児 提交于 2020-02-27 18:48:20
cmake_minimum_required(VERSION 3.5) project(Test) add_executable( te test.cpp ) test.cpp 1 #include <stdlib.h> 2 #include <iostream> 3 #include <stdio.h> 4 #include <fstream> 5 using namespace std; 6 int main() 7 { 8 int test[10] = {0}; // 全都赋值为0 9 for(int i = 0; i < 10; i++) 10 { 11 cout << test[i] << endl; 12 test[i]++; 13 14 } 15 std::cout << "=======================" << std::endl; 16 for (int j = 0; j < 10; j++) 17 { 18 std::cout << test[j] << std::endl; 19 } 20 return 0; 21 } 执行结果: 0 0 0 0 0 0 0 0 0 0 ======================= 1 1 1 1 1 1 1 1 1 1 sort sort.cpp 1 #include <iostream> 2

C ++:“ std :: endl”和“ \\ n”

ε祈祈猫儿з 提交于 2020-02-27 02:04:16
许多C ++书籍都包含这样的示例代码... std::cout << "Test line" << std::endl; ...所以我也总是这样做。 但是,我已经从工作的开发人员那里看到了很多这样的代码: std::cout << "Test line\n"; 是否有技术上的理由要优先于另一个,还是仅仅是编码风格的问题? #1楼 如果您要使用 std::endl ,则其中包含另一个函数调用 a) std::cout << "Hello\n"; b) std::cout << "Hello" << std::endl; a)一次调用运算符 << 。 b)两次调用操作员 << 。 #2楼 可能存在性能问题, std::endl 强制刷新输出流。 #3楼 他们都将编写适当的行尾字符。 除了那个endl,还会导致缓冲区被提交。 您通常在执行文件I / O时不希望使用endl,因为不必要的提交会影响性能。 #4楼 我一直有只使用std :: endl的习惯,因为它很容易看到。 #5楼 假设文件以文本模式打开,那么行尾字符的变化并不重要,除非您要求输入二进制文件,否则这就是您得到的。 编译后的程序将为系统编译出正确的东西。 唯一的区别是 std::endl 刷新输出缓冲区,而 '\\n' 不会。 如果您不希望频繁刷新缓冲区,请使用 '\\n' 。 如果这样做(例如,如果要获取所有输出

C++程序设计(第二版)谭浩强----程序题课后习题答案第一章

一个人想着一个人 提交于 2020-02-26 15:49:45
关于调试时闪一下不出结果的解决办法:最简单的是在return之前加上system("pause"). http://blog.csdn.net/scorpio_tester/article/details/41889531 VS中,将代码格式化,变得整洁美观的快捷键: Ctrl+K+F; 5. #include <iostream> using namespace std; int main() { cout << "This" << "is"; cout << "a" << "C++"; cout << "program." << endl; return 0; } 结果 : 6. #include <iostream> using namespace std; int main() { int a, b, c; a = 10; b = 23; c = a + b; cout << "a + b ="; cout << c; cout << endl; return 0; } 结果: 7. #include <iostream> using namespace std; int main() { int a, b, c; int f(int x, int y, int z); cin >> a >> b >> c; c = f(a, b, c); cout << c <<

第44课 继承中的访问级别

我与影子孤独终老i 提交于 2020-02-26 15:25:37
本文内容来自于对狄泰学院 唐佐林老师 C++深度解析 课程的学习总结 值得思考的问题 子类是否可以 直接访问 父类的 私有成员 ? 思考过程 实验代码 我们来写一个程序,用子类来访问父类私有成员 # include <iostream> using namespace std ; class Parent { private : int m_member ; } ; class Child : public Parent { } ; int main ( ) { Child c ; c . m_member = 10 ; return 0 ; } 编译结果 实验结果:编译报错,子类无法访问父类私有成员 定义类时访问级别的选择 组合与继承的综合实例 实验代码 # include <iostream> # include <string> # include <sstream> using namespace std ; class Object { protected : string mName ; string mInfo ; public : Object ( ) { mName = "Object" ; mInfo = "" ; } string name ( ) { return mName ; } string info ( ) { return mInfo ; } }