【问题标题】:Is it possible to assign to an array from an initializer list?是否可以从初始化列表中分配给数组?
【发布时间】:2021-01-04 12:18:49
【问题描述】:

我正在尝试使从 C++ 中的初始化程序列表中分配给数组成为可能,如果可以的话,该怎么做?可能是新版本的C++需要实现吗?

代码:

#include <iostream>
#include <array>
using namespace std;

int main()
{
    int arrayName_A[5];
    arrayName_A = {1,2,3,4,5};
    for (int i=0;i<5;i++)
    {
        cout << "\n Starting checker" << '\n';
        cout << "checked: " << arrayName_A[i] << '\n';
    }
}

【问题讨论】:

  • 数组不可赋值(它们不能出现在赋值的左侧)。
  • 您使用哪个版本的 C++ 无关紧要。数组是不可分配的。您可以在定义中对其进行初始化(即int arrayname_A[] = {1,2,3,4,5};,这不是赋值),然后单独操作元素(例如在循环中),但不分配整个数组。可以使用初始化程序分配 std::array&lt;int, 5&gt;(尽管它的名称,它是在标题 &lt;array&gt; 中指定的模板类,它管理一个数组,而不是一个数组)。

标签: c++ arrays variable-assignment initializer-list


【解决方案1】:

不,这是不可能的。您要么必须直接初始化数组:

 int arrayName_A[5] = {1,2,3,4,5};

或改用std::array

std::array<int, 5> arrayName_A;
arrayName_A = {1, 2, 3, 4, 5};

【讨论】:

    【解决方案2】:

    数组没有赋值运算符。数组是不可修改的左值。

    那是你可能不会写例子

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

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

    您可以使用基于范围的 for 循环为数组的每个元素设置一个初始值设定项列表中的值,如下面的演示程序所示。

    #include <iostream>
    
    int main() 
    {
        int arrayName_A[5];
        
        size_t i = 0;
        
        for ( const auto &item :  { 1, 2, 3, 4, 5 } ) arrayName_A[i++] = item;
        
        for ( const auto &item : arrayName_A ) std::cout << item << ' ';
        std::cout << '\n';
        
        return 0;
    }
    

    程序输出是

    1 2 3 4 5 
    

    否则使用具有赋值运算符的标准类std::array。例如

    #include <iostream>
    #include <array>
    
    int main() 
    {
        std::array<int, 5> arrayName_A;
        
    
        arrayName_A =  { 1, 2, 3, 4, 5 };
        
        // or
        
        arrayName_A =  { { 1, 2, 3, 4, 5 } };
        
        for ( const auto &item : arrayName_A ) std::cout << item << ' ';
        std::cout << '\n';
        
        return 0;
    }
    

    程序输出和上图一样就是

    1 2 3 4 5 
    

    【讨论】:

      【解决方案3】:

      您需要在声明数组后立即对其进行初始化,如下所示:

      #include <iostream>
      #include <array>
      using namespace std;
      
      int main()
      {
          int arrayName_A[5] = {1,2,3,4,5};
         
          for (int i=0;i<5;i++)
          {
              cout << "\n Starting checker" << '\n';
              cout << "checked: " << arrayName_A[i] << '\n';
      
              cout << "\n Starting checker" << '\n';
              cout << "checked: " << arrayName_A[i] << '\n';
      
              cout << "\n Starting checker" << '\n';
              cout << "checked: " << arrayName_A[i] << '\n';
      
              cout << "\n Starting checker" << '\n';
              cout << "checked: " << arrayName_A[i] << '\n';
      
              cout << "\n Starting checker" << '\n';
              cout << "checked: " << arrayName_A[i] << '\n';
          }
      }
      

      【讨论】:

      • 我知道这一点,但目标是从初始化列表中初始化它
      猜你喜欢
      • 2013-03-14
      • 2013-09-21
      • 2020-05-09
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 2011-06-05
      • 1970-01-01
      相关资源
      最近更新 更多