我制作了动态矢量类..
但问题显示主要功能在循环时打开,
当函数循环时,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];
}
}
}
// vector class
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;
};
答案 0 :(得分:0)
嵌套的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 DynamicArray。在你的例子中,你实际上是在阅读非法数据,因为你去了36行中每一行的第16列,所以你实际上是从450 int数组中读取了576个元素。不管怎么说,我认为阵列是未初始化的,所以它都是垃圾。