1.getchar的用法
- ch = getchar();
- 只能接受单个字符, 输入的数字按照字符处理
- 输入多于一个字符时,只接收第一个字符
- getchar直到按回车键才结束,可用于暂停程序的运行,直到收到下一个回车键
- 程序中有两个以上的getcar函数,应该一次性输入所有字符,再按回车否则会把回车传给后面的函数
2.比较 ‘\n’ 和endl
通常使用换行符\n,在其他情况下则使用控制符endl。一个差别是,endl确保程序继续运行前刷新输出(将其立即显示在屏幕上);而使用“\n”不能提供这样的保证,这意味着在有些系统中,有时可能在您输入信息后才会出现提示。
备注:endl --->end line
对于有输出缓冲的流(例如cout、clog),如果不手动进行缓冲区刷新操作,将在缓冲区满后自动刷新输出。不过对于cout来说(相对于文件输出流等),缓冲一般体现得并不明显。但是必要情况下使用endl代替'\n'一般是个好习惯。
对于无缓冲的流(例如标准错误输出流cerr),刷新是不必要的,可以直接使用'\n'。
由于直接输入/输出和操作系统相关,可能需要切换内核态/用户态,需要一定的时间开销,频繁地进行操作会极大地降低输入/输出的效率,所以标准库对流的输入/输出操作使用缓冲。具体来讲,就是在内存中保存一个大小相对固定的区域(缓冲区)用来储存临时的输入或输出。当必要时,才向系统设备复制缓冲区的内容并清空缓冲区,这个过程称为刷新。
3.文件操作
1\重定向版本
【命令格式】
FILE * freopen(const char * filename, const char * mode ,FILE * stream)
[解释] mode 有“w”或“r”;stream的意思是文件指针 stdin stdout stderr标准错误流
最后需要关闭文件,使用 fclose(stdin); fclose(stdout);
2\fopen版本
4.string类
string类本不是STL的容器,但是它与STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍。
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下的需要。我们尽可以把它看成是C++的基本数据类型。
首先,为了在我们的程序中使用string类型,我们必须包含头文件。如下: #include<string>
1) string s; // 生成一个空字符串s
2) string s(str) ; // 拷贝构造函数生成str的复制品
3) string s(str, stridx); // 将字符串str内"始于位置stridx"的部分当作字符串的初值
4) string s(str, stridx, strlen) ; // 将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值
5) string s(cstr) ; // 将C字符串(以NULL结束)作为s的初值
6) string s(chars, chars_len) ; // 将C字符串前chars_len个字符作为字符串s的初值。
7) string s(num, ‘c’) ; // 生成一个字符串,包含num个c字符
8) string s(“value”); string s=“value”; // 将s初始化为一个字符串字面值副本
9) string s(begin, end); // 以区间begin/end(不包含end)内的字符作为字符串s的初值
10) s.~string(); //销毁所有字符,释放内存
string用法比较方便,string的对象可以直接相加减
5.在使用邻接表存图的时候,注意有向图和无向图,edge数组要开两倍大小
6.最小生成树的板子调了很久,原来是点数和边数搞错了啊!!注意区分点数和边数。
7.注意开 long long!!!
8.写二分的时候的问题
现在连一道模板的儿分题都写不对了,我现在真是废了
首先一个错误就是没有看清楚输出格式,要求空格但是我换了行。
在写mid = (l + r) / 2; 之后,由于是整除,mid的值可能比以前的变小了,所以 l = mid + 1;
9.切方格这个题目,首先是理解错了题意。题目只要求,分成两个部分,我理解成了分成多个部分,并且每个部分和都是60;我又理解成了这两个部分是连续的,其实是不必连续的。