一个工作的std :: copy示例 - 打印一个数组

时间:2011-11-02 02:52:46

标签: c++ arrays std

这不起作用。我正在尝试学习如何使用std :: copy但我找不到任何正常工作的代码。 我在gcc 4.6.1中运行了这个。当我按下控制器D时它没有做任何事情。如果我按下Control C ...它只打印出新行。

在此处找到代码:

Printing an array in 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"; 
} 

1 个答案:

答案 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,