从头再来——记录一些小问题

本文概述了C++中 getchar() 的用法,强调了其接收单字符、换行符 与endl的区别,以及文件操作中的重定向和 fopen()。讨论了如何正确处理字符串和邻接表图,同时提醒读者注意数据类型和常见错误如最小生成树配置。
摘要由CSDN通过智能技术生成

1.getchar的用法

  1.  ch = getchar();
  2. 只能接受单个字符, 输入的数字按照字符处理
  3. 输入多于一个字符时,只接收第一个字符
  4. getchar直到按回车键才结束,可用于暂停程序的运行,直到收到下一个回车键
  5. 程序中有两个以上的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;我又理解成了这两个部分是连续的,其实是不必连续的。

10.vector<int>与vector<int>::iterator

vector<int>是声明向量容器;
例如 verctor<int> v,就是创建了一个名字叫v的向量容器。
vector<int>::iterator是定义向量迭代器
例如,vector<int>::iterator it  就是定义了一个名字叫it 的向量迭代器

for(it=v.begin();it!=v.end();it++)
     cout<<*it<<endl;


就把vector<int> 向量类型的向量V中的int数据都输出了
vector<int> 是向量类型,而vector<int>::iterator是向量的迭代器类型,vector<int>::iterator用于迭代vector<int>中的int数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值