这不起作用。我正在尝试学习如何使用std :: copy但我找不到任何正常工作的代码。 我在gcc 4.6.1中运行了这个。当我按下控制器D时它没有做任何事情。如果我按下Control C ...它只打印出新行。
在此处找到代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> userInput;
// Read until end of input.
// Hit control D
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(userInput)
);
// Print in Normal order
std::copy(userInput.begin(),
userInput.end(),
std::ostream_iterator<int>(std::cout,",")
);
std::cout << "\n";
// Print in reverse order:
std::copy(userInput.rbegin(),
userInput.rend(),
std::ostream_iterator<int>(std::cout,",")
);
std::cout << "\n";
}
答案 0 :(得分:3)
不确定你是如何运行它或你输入的是什么,但这对我来说似乎运行良好:
pax$ g++ -o qq qq.cpp ; ./qq
1
2
3
4
5
0
9
8
7
6
<CTRL-D>
1,2,3,4,5,0,9,8,7,6,
6,7,8,9,0,5,4,3,2,1,
这是在Cygwin下的gcc 4.3.4。需要注意的一点是(至少在我的环境中),必须在新行上输入CTRL-D
。输入:
1 2 3 4 5<CTRL-D>
对我不起作用(CTRL-D
被忽略)但是:
1 2 3 4 5
<CTRL-D>
确实
您可以通过以下操作绕过CTRL-D
的问题:
echo 1 2 3 4 5 6 7 8 9 0 | ./qq
因此文件末尾不依赖于您的终端特性。这一点尤其重要,因为可能是MinGW(是一个Windows应用程序而不是在CygWin的仿真层下运行)需要Windows文件结束字符CTRL-Z
。
运行此命令会按预期运行:
pax$ echo 1 2 3 4 5 6 7 8 9 0 | ./qq
1,2,3,4,5,6,7,8,9,0,
0,9,8,7,6,5,4,3,2,1,