【问题标题】:made 2d array using two different sized 1d arrays使用两个不同大小的一维数组制作二维数组
【发布时间】:2018-05-08 09:56:56
【问题描述】:

如何使用两个不同大小的 1d 数组 arr1[] arr2[] 制作 2d 数组 arr[][], 比如arr1 = {1,2,3}arr2 = {4,5}它应该是这样的:

arr[][] = 1 2 3
          4 5  

【问题讨论】:

  • c 还是 c++?你为什么使用pointer 标签?似乎您已经有了解决方案。如果是,请出示您的代码。如果没有,请忘记指针并使用std::vector
  • 您不能拥有具有不同 1D 数组大小的 2D 数组。
  • @machine_1 是特定于 c/c++ 的吗?因为我很确定你可以用其他语言
  • @mast3rd3mon 是的,C++ 需要数组长度,除了第一个维度,这是推断出来的。其他语言的“数组”其实更像是 c++ 的“向量”。
  • 考虑到这可以用其他语言完成,人们不加评论地投票似乎有点奇怪。

标签: c++ c arrays pointers multidimensional-array


【解决方案1】:

你不能在 C++ 上这样做,唯一的两种方法是指针或 stl 向量,我建议这样做更容易。
像这样(使用 C++11):

#include <vector>

using namespace std;

int main(){
    vector< vector<int> >arr = {{1, 2, 3}, {4, 5}};
}

如果您不能使用 C++11,您仍然可以使用 push_back() 来初始化向量,将循环内的每个值相加或一一添加。

【讨论】:

    【解决方案2】:

    你不能使用arr[][]来拥有多维数组,因为你必须提前声明数组的大小。例如以下是有效的,但数组只有partly initialised

    #include <iostream>
    
    int main() {
        int arr[][4] = {
                         { 1, 2, 3 },
                         { 4, 5 },
                         { 6, 7, 8, 9},
                        };
    
        for (int i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                std::cout << arr[i][j] << std::endl;
            }
        }
    }
    

    您的另一种选择是动态声明数组:

    int* arr[3] {
        new int[4] { 1, 2, 3 },
        new int[2] { 4, 5 },
        new int[4] { 6, 7, 8, 9},
        };
    

    你会或者当然需要数组长度的记录,然后需要释放内存!

    这一切都假设你不能使用std:vector,这将是理想的。

    【讨论】:

    • "但数组只是部分初始化" 没有所谓的“部分初始化”。它已完全初始化。如您未明确给出值的数组元素是默认初始化的(对于数字类型为 0)。
    • @AlgirdasPreidžius 确实如此。为清楚起见,“部分初始化是一个非标准术语,通常指您提供一些初始化程序但不是全部的情况” - stackoverflow.com/questions/10828294/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多