我做了动态向量类。
但是当主函数循环时,问题会显示出来,
当函数循环时,my2dArr 的行大小正在增加
当数据循环时,我想复制新数据。
void main()
{
int data[450];
DynamicArray<int> my2dArr(36, 100);
for(int i = 0;i < 36;++i)
{
for(int j = 1;j < 16;++j)
{
my2dArr[i][j-1] = data[i];
}
}
}
向量类
class DynamicArray
{
public:
DynamicArray(){};
DynamicArray(int rows, int cols): dArray(rows, vector<T>(cols)){}
vector<T> & operator[](int i)
{
return dArray[i];
}
const vector<T> & operator[] (int i) const
{
return dArray[i];
}
void resize(int rows, int cols)//resize the two dimentional array .
{
dArray.resize(rows);
for(int i = 0;i < rows;++i) dArray[i].resize(cols);
}
void clearCOL()
{
for(int i = 0;i < dArray.size();i++)
{
for(int j = 0;j < dArray[i].size();++j)
{
dArray[j].erase();
}
}
}
private:
vector<vector<T> > dArray;
};
嵌套的
for 循环在初始化数组时应该没问题,但您需要将值放入data
数组中才能在初始化时使用它。
如果您只初始化数据一次,则可以考虑接受int[]
的第三个构造函数重载,如下所示:
DynamicArray( int rows, int cols, T array[] ): dArray( rows, vector< T >( cols ) )
{
for( int i = 0; i < rows; i++ )
{
for( int j = 0; j < cols; j++ )
{
dArray[i][j] = array[i * rows + j];
}
}
}
您需要确保数组是您指定的大小。在您的示例中,您传入一个 450 int 数组来初始化一个 3,600 int 的动态数组。在您的示例中,您实际上是在读取非法数据,因为您转到 16 行中每行的第 36 列,因此您实际上是从 456 int 数组中读取 450 个元素。我想数组无论如何都是未初始化的,所以它都是垃圾。