Printing an array in C++?

前端 未结 10 1227
谎友^
谎友^ 2020-11-27 14:35

Is there a way of printing arrays in C++?

I\'m trying to make a function that reverses a user-input array and then prints it out. I tried Googling this problem and i

相关标签:
10条回答
  • 2020-11-27 15:05

    Besides the for-loop based solutions, you can also use an ostream_iterator<>. Here's an example that leverages the sample code in the (now retired) SGI STL reference:

    #include <iostream>
    #include <iterator>
    #include <algorithm>
    
    int main()
    {
      short foo[] = { 1, 3, 5, 7 };
    
      using namespace std;
      copy(foo,
           foo + sizeof(foo) / sizeof(foo[0]),
           ostream_iterator<short>(cout, "\n"));
    }
    

    This generates the following:

     ./a.out 
    1
    3
    5
    7
    

    However, this may be overkill for your needs. A straight for-loop is probably all that you need, although litb's template sugar is quite nice, too.

    Edit: Forgot the "printing in reverse" requirement. Here's one way to do it:

    #include <iostream>
    #include <iterator>
    #include <algorithm>
    
    int main()
    {
      short foo[] = { 1, 3, 5, 7 };
    
      using namespace std;
    
      reverse_iterator<short *> begin(foo + sizeof(foo) / sizeof(foo[0]));
      reverse_iterator<short *> end(foo);
    
      copy(begin,
           end,
           ostream_iterator<short>(cout, "\n"));
    }
    

    and the output:

    $ ./a.out 
    7
    5
    3
    1
    

    Edit: C++14 update that simplifies the above code snippets using array iterator functions like std::begin() and std::rbegin():

    #include <iostream>
    #include <iterator>
    #include <algorithm>
    
    int main()
    {
        short foo[] = { 1, 3, 5, 7 };
    
        // Generate array iterators using C++14 std::{r}begin()
        // and std::{r}end().
    
        // Forward
        std::copy(std::begin(foo),
                  std::end(foo),
                  std::ostream_iterator<short>(std::cout, "\n"));
    
        // Reverse
        std::copy(std::rbegin(foo),
                  std::rend(foo),
                  std::ostream_iterator<short>(std::cout, "\n"));
    }
    
    0 讨论(0)
  • 2020-11-27 15:07

    May I suggest using the fish bone operator?

    for (auto x = std::end(a); x != std::begin(a); )
    {
        std::cout <<*--x<< ' ';
    }
    

    (Can you spot it?)

    0 讨论(0)
  • 2020-11-27 15:11

    My simple answer is:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int data[]{ 1, 2, 7 };
        for (int i = sizeof(data) / sizeof(data[0])-1; i >= 0; i--) {
            cout << data[i];
        }
    
        return 0;
    }
    
    0 讨论(0)
  • 2020-11-27 15:14

    Just iterate over the elements. Like this:

    for (int i = numElements - 1; i >= 0; i--) 
        cout << array[i];
    

    Note: As Maxim Egorushkin pointed out, this could overflow. See his comment below for a better solution.

    0 讨论(0)
提交回复
热议问题