用C ++打印数组?

有没有办法用C ++打印数组?

我正在尝试制作一个功能,该功能可以反转用户输入数组,然后将其打印出来。 我尝试了Google搜索这个问题,似乎C ++无法打印数组。 那不是真的吗?

asked 2020-06-30T06:22:09Z
10个解决方案
48 votes

只是遍历元素。 像这样:

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

注意:正如Maxim Egorushkin指出的那样,这可能会溢出。 请参阅下面的评论,以获得更好的解决方案。

Botz3000 answered 2020-06-30T06:22:46Z
47 votes

使用STL

#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";

    // Update for C++11
    // Range based for is now a good alternative.
    for(auto const& value: userInput)
    {
        std::cout << value << ",";
    }
    std::cout << "\n";
}
Martin York answered 2020-06-30T06:23:06Z
30 votes

我可以建议使用鱼骨操作器吗?

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

(你能发现吗?)

fredoverflow answered 2020-06-30T06:23:30Z
13 votes

除了基于for循环的解决方案之外,您还可以使用ostream_iterator <>。 这是一个示例,该示例利用了(现已退休)SGI STL参考中的示例代码:

#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"));
}

这将生成以下内容:

 ./a.out 
1
3
5
7

但是,对于您的需求而言,这可能是过大的选择。 一个简单的for循环可能就是您所需要的,尽管litb的模板糖也很不错。

编辑:忘记了“反向打印”要求。 这是一种实现方法:

#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"));
}

和输出:

$ ./a.out 
7
5
3
1

编辑:C ++ 14更新,使用诸如std :: begin()和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"));
}
Void answered 2020-06-30T06:24:13Z
6 votes

有声明的数组和未声明的数组,但通过其他方式创建,尤其是使用std::vector

int *p = new int[3];

具有3个元素的数组是动态创建的(并且std::vector也可以在运行时进行计算),并且指向其大小已从其类型中删除的指针指向size。您无法再获取大小来打印该数组。 。 因此,仅接收指向它的指针的函数无法打印该数组。

打印声明的数组很容易。 您可以使用std::vector来获取它们的大小,并将该大小传递给函数,包括指向该数组元素的指针。 但是,您也可以创建一个接受数组的模板,并根据其声明的类型推导其大小:

template<typename Type, int Size>
void print(Type const(& array)[Size]) {
  for(int i=0; i<Size; i++)
    std::cout << array[i] << std::endl;
}

问题是它(显然)不接受指针。 我认为,最简单的解决方案是使用std::vector。它是一个动态的,可调整大小的“数组”(具有您希望从实际数组中获得的语义),具有size673成员函数:

void print(std::vector<int> const &v) {
  std::vector<int>::size_type i;
  for(i = 0; i<v.size(); i++)
    std::cout << v[i] << std::endl;
}

当然,您也可以使它成为接受其他类型向量的模板。

Johannes Schaub - litb answered 2020-06-30T06:24:52Z
3 votes

本质上,大多数C ++中常用的库无法打印数组。 您必须手动遍历它并打印出每个值。

打印数组和转储许多不同种类的对象是高级语言的功能。

Faxwell Mingleton answered 2020-06-30T06:25:17Z
3 votes

必然是! 您必须遍历数组并单独打印出每个项目。

Andy Mikula answered 2020-06-30T06:25:37Z
3 votes

如果对C ++进行编程,则可以打印所需的任何内容。 您必须自己打印每个元素来遍历数组。

Cogwheel answered 2020-06-30T06:25:59Z
2 votes

这可能有帮助//打印数组

for (int i = 0; i < n; i++)
{cout << numbers[i];}

n是数组的大小

Arinjoy Pramanik answered 2020-06-30T06:26:23Z
0 votes

我的简单答案是:

#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;
}
ej8000 answered 2020-06-30T06:26:43Z
translate from https://stackoverflow.com:/questions/1370323/printing-an-array-in-c