【问题标题】:declaring a multidimensional array with unknown size声明一个大小未知的多维数组
【发布时间】:2014-01-12 13:52:01
【问题描述】:

有人可以向我解释为什么这段代码不起作用,我该如何解决? 谢谢你

int main()
    {
    int gridSize;
    cout<<"please enter the grid size: ";
    cin>>gridSize;
    int gridArray[gridSize][gridSize];   
  }

【问题讨论】:

标签: c++ arrays multidimensional-array


【解决方案1】:

使用std::vector&lt;int&gt;(rows * cols) 甚至std::vector&lt;std::vector&lt;int&gt;&gt;()。它不起作用,因为 C++ 不支持 VLA。即将发布的技术规范中将提供std::dynarrays。

【讨论】:

    【解决方案2】:

    std::vector 是执行此类操作的首选方式,但如果您只是想知道如何手动操作:

    int main()
    {
        int gridSize;
        std::cout << "Enter size of grid: ";
        std::cin >> gridSize;
        int** gridArray = new int*[gridSize];
        for (int i = 0; i < gridSize; i++)
        {   
            std::cout << std::endl << i << std::endl;
            gridArray[i] = new int[gridSize];
        }   
    }
    

    基本上,您正在使用指向指针的指针数组,然后设置第二维。但是如果你做这样的事情,你将不得不手动delete 内存以避免泄漏。 同样,不建议使用这种方式,只是为了提供专业知识

    Parashift's C++ FAQ 对于任何新的/中级 c++ 程序员来说都是一个很好的资源。

    【讨论】:

    • 非常感谢您的帮助,并为我提供了如此有用的信息
    【解决方案3】:
    class Table
    {
    public:
        Table(int rows, int cols)
        {
            tab_.resize(rows);
            for (auto& row : tab_)
            {
                row.resize(cols);
            }
        }
    
        vector<int>& operator[](int row) { return tab_[row]; }
    private:
        vector<vector<int> > tab_;
    };
    

    【讨论】:

    • 我真的很想知道为什么它被否决了,因为如果我需要一张桌子,我会这样做。
    • 1) OP 没有要求一个表,也没有一个类,而只是要求一个动态大小的多维数组。这是 IMO 一个非常详细的解决方案。2) 在常规用例中,我永远不会如果它不是核心功能(例如,用于数据库库),则为此编写一个额外的类,但在我的实现中直接对向量进行操作(隐藏了这一方面)。3)如果我编写这样一个类,我会将其设计为模板,使其支持任意数量的维度,并用单个向量或字节缓冲区适当地实现它。这里的要点很简单 1):没有问,太详细但同时又太笼统
    猜你喜欢
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多