当前位置:C++技术网 > 资讯 > STL中copy算法读取数据时是否加空格的问题

STL中copy算法读取数据时是否加空格的问题

更新时间:2016-04-22 20:35:30浏览次数:1+次

对于cin我们知道,它遇到Enter,Space,Tab等键就会结束输入。那么,下面,我们看个代码:

#include "iostream"
#include "vector"
#include "windows.h"
#include "iterator"
#include "algorithm"

using namespace std;

int main()
{
	vector<int> coll;
	copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(coll));
	copy(coll.begin(),coll.end(),ostream_iterator<int>(cout,"\n"));

	system("pause");
	return 0;
}
看看输出:


看到没有,两个不同的输入方式就有两种不同的输出结果,尽管输入的数据都是相同的,我们来看看图1的调试过程:

再看看图2的调试过程:

对于原因呢,我之前就讲过了,这是因为cin的读取停止问题。但是我们也有办法解决,直接cin.getline就行了。不过现在,本文还没有结束!也不接着讲解cin.getline的事,而是,另外的问题。我们再看个图:

没错,上图中,我们输入的数据并没有输出来!为什么?先不急着回答这个问题,我们先来验证下我们的想法,老办法,代码调试:

可以看到,我们的coll都没有读入数据。这是为什么?其实很简单,int是整型数据,ANSI下是存储两个字节的也就是16位一旦我们输入的数据超过10位(算上换行符)不信的话,你自己调试代码试试!那么,我们要怎么解决这个问题呢?很简单啊,加上空格就行,看:

完美解决问题了。其实对于int的输入为什么只能输入10位的原因,还应该有别的解释。有会的,可以赐教!