全局变量和c ++中main之外的多维数组

时间:2011-04-02 03:50:02

标签: c++

编辑#1 所以我认为我的解决方案是通过函数传递类,然后我必须在main中获取大小值并将它们传递给类。那么如何基于2个int值在类中创建多维数组呢?这就是我所拥有的,但我得到错误“`ii'不能出现在常量表达式中”

class tempHolder{
  public: 
  bool C1[col1][row1];

  tempHolder(){
  }

  tempHolder(int i, int ii){              
  int* C1 = new bool[i][ii];
  }
}

所以我的程序有一个多维数组,但我正在使用全局变量(我知道这是一种糟糕的样式)来声明数组的大小。问题是我也将这个数组传递给函数,我在类中使用它,如下面的代码......

#include <iostream>
using namespace std;
const int row1 = 12;
const int col1 = 32;
class tempHolder{
      public: 
      bool C1[col1][row1];
      void operator=(bool C2[col1][row1]){
                for(int i=0;i<row1;i++)
                  for(int ii=0;ii<col1;ii++)
                    C1[i][ii] = C2[i][ii];
      }
};
void printTable(bool CC[][row1], int, bool);

int main(int argc, char *argv[]) {
    col1=5; //error
    bool C1[col1][row1];

所以我希望能够在main的开头更改row1和col1的值,然后更改整个程序的数组大小。如果我声明上面的全局变量,那么程序编译,但由于它们是常量,我将无法更改它们。我不能使用#define,因为它们根本不可更改。那么我该如何调整整个程序的数组大小呢?

2 个答案:

答案 0 :(得分:0)

在编译程序时 main开始之前,数组的大小设置为

因此,即使col1仅在启动时更改一次,它仍然必须是正确的非const变量。

您可能希望std::vector实现可变大小的数组。请注意,vector<bool>是一个特殊优化的类,每个布尔值使用一位而不是一个字节。如果出现问题或性能不佳,您可以尝试使用vector<char>

#include <iostream>
using namespace std;

int row1 = 12;
int col1 = 32;

typedef vector< vector< bool > > bit_array_2d;

class tempHolder{
      public: 
      bit_array_2d C1;
      void operator=( bit_array_2d const &C2 ){
          C1 = C2;
      }
};

int main(int argc, char *argv[]) {
    col1=5; // OK
    bit_array_2d C1( col1, vector< bool >( row1 ) );

如果只有少数可能的大小可供选择,更高级的方法是使用模板参数化的C数组。

答案 1 :(得分:0)

您不能简单地通过在运行时更改维度来更改数组的大小 - 您需要使用new动态分配内存。最好的通常是使用STL容器 - 它们内置了长度属性,并且可以轻松调整大小。