C ++是否可以输出数组内的所有数据而不知道数组有多长?

时间:2015-08-13 10:29:04

标签: c++ arrays

我试图在不知道它有多少成员的情况下输出数组中的所有数据。

是否有任何内置函数或库可以显示数组中有多少成员?

5 个答案:

答案 0 :(得分:2)

您可以使用std::vector内置类 只需使用#include <vector>即可使用

答案 1 :(得分:1)

尝试以下方法:

#include <iostream>
#include <algorithm>

int main() {
    int xs[] = {1, 2, 3, 4, 5};
    std::for_each(std::begin(xs), std::end(xs), [](int const& x) { std::cout << x << std::endl;});
}

但请注意,数组的大小仍然是已知信息(更准确地说,是编译时信息)。在上文中,我们只是避免明确处理该信息。

答案 2 :(得分:1)

是的 - 没有。如果你有一个实际的数组,即int a[N];,那么答案非常明显:你的数组有N个元素。如果你只有一个指针(int* a),可能是由于数组到指针的衰减,那么答案是否定的。

如果您想要一个确定数组大小的函数,请尝试以下函数模板:

template <class T, std::size_t N>
constexpr std::size_t arr_length(T const (&)[N]) {
  return N;
}

int  main() {
  int iarr[] = {42, 43, 44};
  constexpr auto length = arr_length(iarr);

  double darr[length] = {};
}

对于作为指针传递给某个函数的数组,确定长度的可能性很小:

  • 通过显式传递数组的大小作为第二个参数
  • 通过将第二个指针传递给一个超过数组末尾的指针,大小就是两个指针的差异
  • 通过在数组中使用表示结尾的sentry元素。最流行的例子是C风格字符串(即字符数组)中的'\0'分隔符

答案 3 :(得分:0)

不,你不能。 我建议你使用\\:,它会解决你的问题。

如果是std::vector,您可以使用std::array

for_each

如果您的数组包含指针,并且您默认将它们初始化为for(const auto item : arr) ,则可以检查指针是否有效,并且仅当指针不是nullptr时才打印。

nullptr

答案 4 :(得分:0)

也许你在找这个: int arraySize = (sizeof(myArray)/sizeof(*myArray));

#include <iostream>
using namespace std;

int main(){

  int myArray[] = {0,0,0,0,0};
  int arraySize = (sizeof(myArray)/sizeof(*myArray));
  cout<<arraySize<<endl;
  return 0;
}

输出

  

5

我的程序

enter image description here