【问题标题】:Copy (row) from 2D array to 1D array从二维数组复制(行)到一维数组
【发布时间】:2012-11-17 02:09:28
【问题描述】:

所以我有一个二维数组 multiarray[a][b] 和另一个数组 buf[b]。

我无法将“buf”指定为等于多数组的行之一。执行此操作的确切语法是什么?

【问题讨论】:

  • 你现在有什么代码?
  • 您不能分配数组。数组名称不是左值。
  • buf[0] = &multiarray[index];是我所拥有的。 @Chris,但是数组在 C 中被视为指针,是吗?
  • 数组也不是指针。它们在某些情况下会衰减,但这不是其中之一。
  • 赞成,因为 -1 似乎不合理。我讨厌开车投票。

标签: c++ multidimensional-array


【解决方案1】:

数组不可赋值。对此没有核心语言语法。 C++ 中的数组复制是在库级别或用户代码级别实现的。

如果这应该是 C++ 并且如果你真的需要创建一个单独的 copy buf 的某些行 i 的 2D 数组 mutiarray,那么你可以使用 @987654324 @

#include <algorithm>
...

SomeType multiarray[a][b], buf[b];
...
std::copy(multiarray[i], multiarray[i] + b, buf);

或在 C++11 中

std::copy_n(multiarray[i], b, buf);

【讨论】:

    【解决方案2】:
    // a 2-D array of char
    char multiarray[2][5] = { 0 };
    // a 1-D array of char, with matching dimension
    char buf[5];
    // set the contents of buf equal to the contents of the first row of multiarray.
    memcpy(buf, multiarray[0], sizeof(buf)); 
    

    【讨论】:

      【解决方案3】:

      我看了代码在snort(旧版本)中有类似的功能,它是从tcpdump借来的,也许对你有帮助。

      /****************************************************************************
       *
       * Function: copy_argv(u_char **)
       *
       * Purpose: Copies a 2D array (like argv) into a flat string.  Stolen from
       *          TCPDump.
       *
       * Arguments: argv => 2D array to flatten
       *
       * Returns: Pointer to the flat string
       *
       ****************************************************************************/
      char *copy_argv(char **argv)
      {
        char **p;
        u_int len = 0;
        char *buf;
        char *src, *dst;
        void ftlerr(char *, ...);
      
        p = argv;
        if (*p == 0) return 0;
      
        while (*p)
          len += strlen(*p++) + 1;
      
        buf = (char *) malloc (len);
        if(buf == NULL)
        {
           fprintf(stderr, "malloc() failed: %s\n", strerror(errno));
           exit(0);
        }
        p = argv;
        dst = buf;
        while ((src = *p++) != NULL)
        {
            while ((*dst++ = *src++) != '\0');
            dst[-1] = ' ';
        }
        dst[-1] = '\0';
      
        return buf;
      

      }

      【讨论】:

        【解决方案4】:

        如果您使用向量:

        vector<vector<int> > int2D;
        vector<int> int1D;
        

        您可以简单地使用向量的内置赋值运算符:

        int1D = int2D[A];//Will copy the array at index 'A'
        

        如果您使用 c 样式的数组,一种原始方法是将所选行中的每个元素复制到一维数组中:

        例子:

        //Assuming int2D is a 2-Dimensional array of size greater than 2.
        //Assuming int1D is a 1-Dimensional array of size equal to or greater than a row in int2D.
        
        int a = 2;//Assuming row 2 was the selected row to be copied.
        
        for(unsigned int b = 0; b < sizeof(int2D[a])/sizeof(int); ++b){
            int1D[b] = int2D[a][b];//Will copy a single integer value.
        }
        

        语法是规则,算法是您可能的意思/想要的。

        【讨论】:

          猜你喜欢
          • 2010-10-22
          • 2021-12-31
          • 2011-07-23
          • 1970-01-01
          • 2020-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多