c++ - C++像初始化一样将数据分配给数组

标签 c++

为什么我们可以用初始化数组

int a[]={1,2,3};

但是我们不能将数据分配给现有数组
a = {2,3,4};



是否可以制作一个将const数组作为参数的函数,并调用它在一行中分配变量?

伪代码:
int a[] = {1,2,3};
myfunc(a, (int){2,3,4});

void myfunc(int &array1, const int array2)
{
    copy(array2,array1);
}

最佳答案

是的,您可以编写一个可以推断出数组大小的函数模板

template<size_t N>
void myfunc(int (&a)[N], int const (&b)[N])
{
  std::copy(b, b + N, a);
}

请注意,这允许根据需要从大括号初始化列表中推导出第二个参数。另一个优点是您不会弄错尺寸。

现在您可以单行复制
int main()
{
  int a[] = {1,2,3};

  for (auto i : a)
    std::cout << i;  // 1 2 3 

  myfunc(a, {2,3,4});

  for (auto i : a)
    std::cout << i;  // 2 3 4


  myfunc(a, {2,3,4,5});  // error, as it should be
}

关于c++ - C++像初始化一样将数据分配给数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61068840/

相关文章:

c++ - unique_ptr 与多线程

c++ - Netbeans 7.2 显示 "Unable to resolve identifier",尽管构建成功

c++ - 是否值得将 540 字节的类切成更小的 block ? (C++)

c++ - 我的 RSA 加密每次生成 2^64 (C++)

c++ - 指向基类错误的成员函数的指针

c++ - 复制构造函数没有合适的默认构造函数

c++ - A* bug(A星搜索算法)

c++ - 如何初始化一个char数组?

c++ - 在 vector 大括号初始化中将 C 数组传递给结构初始值设定项

c++ - win forms C++/CLI 如何使用 header 中的 .cpp 类