`

使用istream_iterator,copy后cin不能在输入问题的解决

阅读更多

 

今天使用istream_iterator和copy将输入保存在vector的数组中,但是输入完之后就不能在使用cin进行输入了,如:cin>>input;这句总是不能被执行,原因是copy的结束是eof,也就是标准输入的结尾标记是istream_iterator<unsigned short>(),这个是被标记成一输入错误,后面的标准输入就不能进行下去了……

 

istream_iterator<unsigned short> is(cin);  
istream_iterator<unsigned short> eof; 
vector<unsigned short> harr; 
copy(is, eof, back_inserter(harr));

 

 应该在再次使用标准输入之前调用cin的clear和sync,clear()函数是清理标准输入错误的,sync()是清理缓存区的。

 

istream_iterator<unsigned short> is(cin);  
istream_iterator<unsigned short> eof; 
vector<unsigned short> harr; 
copy(is, eof, back_inserter(harr));

cin.clear();
cin.sync();

 

在调用copy之前应该调用sync()确保标准输入区缓存区为空的,如果没有调用cin.sync(),input的内容也会输入到harr数组中去

cin>>input;
cin.sync();


istream_iterator<unsigned short> is(cin);  
istream_iterator<unsigned short> eof; 
vector<unsigned short> harr; 

copy(is, eof, back_inserter(harr));
 
分享到:
评论

相关推荐

    STL学习代码

    例如,我们可以创建一个`std::istream_iterator`从`std::cin`读取整数并将其存储在一个`std::vector`中: ```cpp #include #include &lt;iterator&gt; #include int main() { std::vector&lt;int&gt; numbers; std::...

    【操作系统实验报告】文件读入与导出

    - 使用标准输入输出流(如`cin`和`cout`)实现与用户的交互。 - 示例代码中通过以下方式实现: ```cpp string tt, ll; cout ; cin &gt;&gt; tt; cout ; cin &gt;&gt; ll; ``` 2. **文件操作**: - 使用`ifstream`和`...

    stl学习总结

    std::istream_iterator&lt;int&gt; in_it(std::cin); while (in_it != std::istream_iterator()) { std::cout *in_it ; ++in_it; } ``` ##### 向前迭代器(Forward Iterator) 向前迭代器结合了输出迭代器和输入迭代器的...

    泛型编程(C++)

    std::copy(std::istream_iterator(std::cin), std::istream_iterator(), std::back_inserter(e)); std::vector&lt;Date&gt;::iterator first = std::find(e.begin(), e.end(), "01/01/95"); std::vector&lt;Date&gt;::...

    集合的所有运算的c++源代码

    std::copy(std::istream_iterator(iss), std::istream_iterator(), std::inserter(set, set.begin())); // 输出集合 std::cout 集合元素:"; for (auto elem : set) { std::cout ; } ``` 最后,比较操作通常基于...

    标准模板库STL(Standard Template Library)指南

    std::copy(std::istream_iterator(std::cin), std::istream_iterator(), std::back_inserter(v)); ``` ###### 4.4.3 函数适配器 函数适配器可以改变函数对象的行为,例如`bind2nd`可以绑定函数的一个参数。 ```...

    C++标准库和对应头文件.txt

    - **`istream_iterator`**:用于从输入流提取元素的迭代器适配器。 #### 28. `&lt;ios&gt;` - 输入输出流 - **`ios`**:输入输出流的基本类,继承自`ios_base`。 #### 29. `&lt;iomanip&gt;` - 输入输出调整 - **`setfill()`...

    空间后方交会_摄影测量

    void readcondition(int numberofDot,istream streamin,ostream streamout ) { N = numberofDot; //控制点数据: for (int i(0);i;i++) { //streamout请输入第"个坐标(x,y,xp,yp坐标用空格隔开):"; Point ...

    c++ 标准库(未统计c++ 11 后的)

    15. **Istream**: 标准输入流库,主要类为`std::basic_istream`,`std::cin`是其实例。 16. **Iterator**: 迭代器库,定义了各种迭代器类型,用于遍历容器。 17. **Limits**: 类型限制库,`std::numeric_limits`...

    The-C++-Programming-Language(ch 3)

    istream_iterator&lt;string&gt; begin(file), end; vector&lt;string&gt; lines(begin, end); for (const auto& line : lines) { cout ; } return 0; } ``` #### 3.13 遍历和谓词 (Traversals and Predicates) C++...

Global site tag (gtag.js) - Google Analytics