为什么初始化器无法确定数组的大小?

时间:2019-12-11 15:33:55

标签: c++

由于我的array1和array2定义,我的代码无法构建。我找不到问题。 错误代码是 33:54:错误:初始化程序无法确定'array1'的大小 33:54:错误:必须使用大括号括起来的初始化程序来初始化数组

#include <iostream>
#include <string>
#include <algorithm>

  } 
} 

int main() 
{ 
  int unSorted1[] = {1,49,2,5,8,1,56,32,65,7,65,23,5};
  int unSorted2[] = {9,4,5,3,7,8,1,56,45,32,78,22}; 

  int size1 = sizeof(unSorted1)/sizeof(unSorted1[0]); 
  int size2 = sizeof(unSorted2)/sizeof(unSorted2[0]); 
  int array1[] =  std::sort(unSorted1,unSorted1+size1);
  int array2[] =  std::sort(unSorted2,unSorted2+size2);



  // Function calling 
  intersectionArrays(array1, array2, size1, size2); 

  return 0; 
}

1 个答案:

答案 0 :(得分:1)

std::sort返回void。由于它没有返回值,因此不能用于初始化任何东西。 std::sort修改输入范围。

此外,数组只能由元素列表初始化。无法从另一个数组 1 初始化一个数组,我怀疑您期望std::sort返回。

您可以简单地调用intersectionArrays(unSorted1, unSorted2, size1, size2);,因为这些数组现在在调用std::sort之后进行排序。也许可以给数组起个更好的名字,因为它们在整个程序中并不是未排序的。如果要保留数组的未排序副本,则可以使用std::partial_sort_copy代替std::sort。尽管名称中“部分”,它仍可用于对整个范围进行排序复制。

1 但是,进行这种初始化有一个技巧。数组可以是类的成员,而包装器类的隐式副本构造函数使其可以从另一个实例构造(也可以赋值)。对于此类数组包装类,有一个标准模板。它称为std::array


P.S。建议不要使用sizeof(unSorted1)/sizeof(unSorted1[0]),而建议使用std::size(unSorted1)。而不是unSorted1+size1