【问题标题】:Return a new array with specified values?返回具有指定值的新数组?
【发布时间】:2015-08-28 15:49:17
【问题描述】:

有没有办法写如下功能代码

int* returnFilledArray() {
 int* arr = new int[2];
 arr[0] = 1;
 arr[1] = 2;
 return arr;
}

不知何故? (创建并填充数组作为一个衬垫)。

int* returnFilledArray() {
 return new int {1,2};
}

如果尝试了各种组合,但我总是会遇到一些语法错误,所以如果是 可能我会感谢您的详细解释。

【问题讨论】:

  • 试试这个 int[] returnFilledArray{......}
  • 请注意,如果您创建并返回这样的数组,则无法知道它的实际长度,除非您对所有数组都有一个已知的恒定长度。我更愿意推荐 std::vector 而不是普通数组。
  • @Mephane: std::vector 还具有可以使用Boost.Assign 的优点(仅需要 C++11 之前的版本)。
  • @moon: int[] returnFilledArray();int* returnFilledArray() 是完全相同的函数签名,所以评论(虽然被赞成)根本没有意义。
  • 我不能使用 std::vector 因为我们必须编写一个小型编译器而不使用 std 中的数据结构。

标签: c++


【解决方案1】:

是的..

std::vector<int> returnFilledArray()
{
  int a[] = {1, 2};
  return std::vector<int>(a, a+2);
}

【讨论】:

    【解决方案2】:

    如果不使用特殊库,您将无法在标准 C++ (03) 中执行您想要执行的操作。

    【讨论】:

      【解决方案3】:

      C++ 0x 支持initializer lists - 你可以选择吗?

      【讨论】:

      • 我只是想知道这是否可能,因为您可以在 Java 中执行类似的操作。我不一定需要它。
      【解决方案4】:

      我已经回答了类似的问题here。您可以使用以下技术:

      template<typename T, T _0, T _1, T _2, T _3, T _4> struct Array
      {
        static T* Init (T *a)
        {
          a[0] = _0;
          a[1] = _1;
          a[2] = _2;
          a[3] = _3;
          a[4] = _4;
          return a;
        }
      };
      
      int* fun ()
      {
        return Array<int, 1, 2, 3, 4, 5>::Init(new int[5]);
      }
      

      【讨论】:

      • 这只是 5 个元素的示例;您可以根据需要更改元素的数量。这里的示例是针对int,但您可以将相同的结构用于任何类型。
      • 所以一个简单的版本,就像在 java 中一样: public static int[] myFunc() { return new int[] {2,3,4,19}; } 在 c++ 中是不可能的吗?
      • 当前标准中没有,在 C++0x 中引入了与 Java 相同的功能,称为“初始化器列表”,您可以在其中声明此类数组。此外,您可以在“类”本身中声明变量时对其进行初始化。
      【解决方案5】:

      C++0x:

      #include <vector>
      std::vector<int> returnFilledArray()
      {
        return std::vector<int> {1,2} ;
      }
      

      【讨论】:

      • 他说他不能使用向量
      【解决方案6】:

      如果你不允许使用std::vector,那么你可以试试宏:

      #define FILLED_ARRAY(name) int name[] = {1, 2}
      

      【讨论】:

      • -1:他想要一个动态分配的数组。这个是自动的,会从堆栈中掉下来。
      • 我不确定他是否真的希望数组在堆上。或者只想要一个班轮。
      • 好吧,我想我也不确定,所以我编辑了你的帖子并颠倒了 d/v
      • @John,谢谢。但编辑是什么!?我没有看到任何变化。
      • 我所做的只是在末尾添加一个空格。我无法反转我的 d/v,因为它已经存在了 15 分钟。所以我只是自己编辑了一个空编辑。 :)
      【解决方案7】:

      我能够使用

      完成类似的任务
      int *ptr = new int[]{1, 2, 3};
      

      然后你可以从你的函数返回

      return (new int[]{1, 2, 3});
      

      【讨论】:

        猜你喜欢
        • 2020-09-15
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 2021-07-07
        • 2021-03-02
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多