C ++赋值将一维数组的部分复制到多维数组

时间:2018-02-04 23:54:20

标签: c++ arrays multidimensional-array

这是我第一次在这里发帖,我可能没有以正确的方式做到这一点,对不起提前。

我无法理解如何将两个单独的一维数组复制到一个多维数组中。这是我的任务的一部分,但我已经把它转过来,我可能会失去它的分数,但它没关系。只要我了解它是如何完成的,我仍然会感到高兴。

我遇到问题的具体部分是第5部分,我得到了其他一切,也许是因为它是漫长的一天,但我似乎无法得到它。我将发布整个作业以及我的代码。感谢您抽出时间阅读所有这些内容。

编写一个C ++程序,用于测试第1至第7部分中讨论的函数main和函数。(根据需要添加其他函数,例如打印二维数组。)。

考虑以下函数main:

<code>int main()
{
     int inStock[10][4];
     int alpha[20];
     int beta[20];
     int gamma[4] = {11, 13, 15, 17};
     int delta[10] = {3, 5, 2, 6, 10, 9, 7, 11, 1, 8};
     .
     .

     .
}</code>
  1. 编写setZero函数的定义,将int类型的任何一维数组初始化为0(alpha和beta)。

  2. 写出函数inputArray的定义,提示用户输入20个数字并将数字存储到alpha中。

  3. 编写函数doubleArray的定义,将beta元素初始化为alpha中相应元素的两倍。确保阻止该功能修改alpha元素。

  4. 写出函数copyGamma的定义,它将inStock的第一行元素从gamma和inStock的剩余行设置为inStock前一行的三倍。确保这一点 你阻止该函数修改gamma元素。

  5. 5。写入函数copyAlphaBeta的定义,将alpha存储到inStock的前五行,将beta存储到inStock的最后五行。确保阻止该功能修改 alpha和beta的元素。

    1. 编写printArray函数的定义,该函数打印int类型的任何一维数组。

    2. 写出函数setInStock的定义,提示用户输入inStock第一列的元素。然后,该函数应将剩余列中的元素设置为两倍 上一列中的相应元素,减去delta中的相应元素。

    3. 这是我的代码:

      <code>
      #include <iostream>
      using namespace std;
      
      int setZero(int alpha[], int beta[]);
      int inputArray(int alpha[]);
      int doubleArray(const int alpha[], int beta[]);
      int copyGamma(const int gamma[], int inStock[][4]);
      void copyAlphaBeta(int inStock[][4], const int numberOfRows, const int 
      alpha[], const int beta[], int numSize);
      void printArray(int print[], int n);
      int setInStock(int inStock[][4],const int delta[]);
      
      
      int main()
      {
          int inStock[10][4];
          int alpha[20];
          int beta[20];
          int gamma[4]={11,13,15,17};
          int delta[10]={3,5,2,6,10,9,7,11,1,8};
      
          setZero(alpha, beta);
          cout << "Alpha after initialization" << endl;
          printArray(alpha, 20);
      
          inputArray(alpha);
          cout << "Alpha after reading 20 numbers" << endl;
          printArray(alpha, 20);
      
          doubleArray(alpha, beta);
          cout << "Beta after a call to doubleArray" << endl;
          printArray(beta, 20);
      
          copyGamma(gamma, inStock);
      
          copyAlphaBeta(inStock, 10, alpha, beta, 20);
          for (int row=0; row<10;row++)
              for (int col=0; col<4; col++)
              {
                  if (col%4==0)
                      cout << endl;
                  cout << inStock[row][col] << '\t';
              }
          cout << endl;
      
          setInStock(inStock, delta);
      
          return 0;
      }
      
      int setZero(int alpha[], int beta[])
      {
          for (int i=0; i<20; i++)
          {
              alpha[i]=0;
              beta[i]=0;
          } 
          cout << endl;
      }
      int inputArray(int alpha[])
      {
          cout << endl;
          cout << "Enter 20 integers" << endl;
          for (int i=0; i<20; i++)
          {
              cin >> alpha[i];
          }
          cout << endl;
          return 0;
      }
      int doubleArray(const int alpha[], int beta[])
      {
          cout << endl;
      
          for (int i=0; i<20; i++)
          {
              beta[i]=alpha[i]*2;
          }
          cout << endl;
          return 0;
      }
      int copyGamma(const int gamma[], int inStock[][4])
      {
          cout << endl;
          cout << "inStock after a call to copyGamma" << endl;
          for (int row=0;row<10;row++)
          for (int column=0;column<4;column++)
          {
              if (row==0)
                  inStock[row][column]=gamma[column];
              else
                  inStock[row][column]=3*inStock[row-1][column];
          }
          cout << endl;
          for (int r=0;r<10;r++)
          for (int c=0; c<4;c++)
          {
              if (c==0)
                  cout << endl;
              cout << inStock[r][c] << '\t';
          } 
          cout << endl;
          return 0;
       }
      void copyAlphaBeta(int inStock[][4], const int numberOfRows, const int 
      alpha[], const int beta[], int numSize)
      {
          cout << endl;
          cout << "inStock after a call to copyAlphaBeta" << endl;
      
          for(int r=0;r<numberOfRows;r++)
          {
              for(int c=0;c<4;c++)
              {
                  for (int counter=0; counter<numSize; counter++)
                  {
                      if(r<5)
                      {
                          inStock[r][c]=alpha[counter];
                      }
                      else if (r>=5)
                      {
                          inStock[r][c]=beta[counter];
                      }
                  }
              }
          }
      
          cout << endl;
      }
      void printArray(int print[], int n)
      {
          cout << endl;
          for (int i=0;i<n;i++)
              cout << print[i] << " ";
          cout << endl;
      }
      int setInStock(int inStock[10][4],const int delta[])
      {
      
          int input;
          cout << endl;
          cout << "Enter 10 integers" << endl;
      
          for (int r=0;r<10;r++)
          for (int c=0;c<4;c++)
          {
              if(c==0)
              {
                  cin >> inStock[r][c];
              }
              else
                  inStock[r][c] = 2 * inStock[r][c-1] - delta[r];
          }
          for (int row=0; row<10;row++)
          for (int col=0; col<4; col++)
          {
              if (col%4==0)
                  cout << endl;
      
              cout << inStock[row][col] << " ";
          }
      }
      

      TL; DR - 需要帮助理解过去的作业,我只是想知道正确的方法。也请批评,寻找改进的方法。谢谢!

      编辑: 我遇到的问题是这部分:

      1. 写入函数copyAlphaBeta的定义,该函数将alpha存储到inStock的前五行,并将beta存储到inStock的最后五行。确保阻止该功能修改 alpha和beta的元素。
      2. 我的问题的这部分代码是:

        <code>
        void copyAlphaBeta(int inStock[][4], const int numberOfRows, const int 
        alpha[], const int beta[], int numSize)
        {
            cout << endl;
            cout << "inStock after a call to copyAlphaBeta" << endl;
        
            for(int r=0;r<numberOfRows;r++)
            {
                for(int c=0;c<4;c++)
                {
                    for (int counter=0; counter<numSize; counter++)
                    {
                        if(r<5)
                        {
                            inStock[r][c]=alpha[counter];
                        }
                        else if (r>=5)
                        {
                            inStock[r][c]=beta[counter];
                        }
                    }
                }
            }
        
            cout << endl;
        }</code>
        

        感谢您的链接,我暂时不允许使用矢量,但我肯定会研究它们。

2 个答案:

答案 0 :(得分:1)

首先,如果您被允许使用std::vector,您应该使用它。请阅读std::vector,了解更多详情。

Vector提供了一个动态分配(在后面)的内存块,可以根据添加/删除元素在运行时“扩展”和更改。您可能想学习使用矢量,因为它们非常有用。

但是,您并不需要矢量来进行复制。您可以使用std::copy为您执行此操作。这里有更多信息:std::copy

您可以使用它为您的案例选择3个输入。前两个是开始和结束指针,最后一个输入是目标的起始指针。你应该能够弄清楚它们对你的项目是什么。

答案 1 :(得分:0)

在你的嵌套for循环中,最后一个循环是错误的,它将重复将不同的alpha [count]和beta [count]值放入同一个inStock [r] [c]元素中。

您可以删除此循环并更改代码,如

for(int r=0;r<numberOfRows;r++)
    {
        for(int c=0;c<4;c++)
        {
                if(r<5)
                {
                    inStock[r][c]=alpha[c]; // assuming size of alpha is 4
                }
                else if (r>=5)
                {
                inStock[r][c]=beta[c]; //assuming size of beta is 4
                }
         }
    }

在此代码中,您假设inStock有4列,每行4列,将填充4个alpha和beta数组元素。