Re: multi-dimentional arrays
To add to what others wrote, you may want to use a simple C++ template class
I developed to manage 2D arrays (internally represented as 1D array).
http://www.geocities.com/giovanni.dicanio/vc/Array2D.zip
The above link contains a VS2008 project to show how to use the array.
Basically, you can write code like this:
// rows and columns are integers...
CArray2D< string > data( rows, columns );
// Fill data:
data.SetAt( 0, 0, "Bob" ); // row 0, column 0
data.SetAt( 0, 1, "False" ); // row 0, column 1
...
You can also use chained calls like this:
data.SetAt( ... ).SetAt( ... ) ... .SetAt( ... );
This is the file Array2D.h (the header file where the Array2D template class
is defined):
<file name="Array2D.h">
//////////////////////////////////////////////////////////////////////////
// Array2D.h
// A template class representing a 2D array.
//
// By Giovanni Dicanio <gdicanio@email.it>
// Last update: 2008, August 20th
//////////////////////////////////////////////////////////////////////////
template <typename T>
class Array2D
{
public:
//
// CONSTRUCTION
//
// Creates an empty array
Array2D()
: m_rows( 0 ), m_columns( 0 )
{
}
// Creates an array with specified size
explicit Array2D( int rows, int columns )
: m_rows( 0 ), m_columns( 0 )
{
Resize( rows, columns );
}
//
// PROPERTIES
//
// Returns number of rows
int Rows() const
{
return m_rows;
}
// Returns number of columns
int Columns() const
{
return m_columns;
}
// Is the array empty (i.e. 0 rows and 0 columns) ?
bool IsEmpty() const
{
if ( m_rows == 0 && m_columns == 0 )
{
return true;
}
else
{
// Can't have 0 rows and >= 0 columns, or vice versa
ASSERT( m_rows > 0 );
ASSERT( m_columns > 0 );
return false;
}
}
//
// OPERATIONS
//
// Clears the array (i.e. makes it empty)
Array2D & Clear()
{
m_rows = 0;
m_columns = 0;
m_data.clear();
return *this;
}
// Changes array size
Array2D & Resize( int rows, int columns )
{
ASSERT( rows > 0 );
ASSERT( columns > 0 );
m_data.resize( rows * columns );
m_rows = rows;
m_columns = columns;
return *this;
}
// Returns element at specified position
// (row and column are 0-based)
const T & GetAt( int row, int column ) const
{
ASSERT( ! IsEmpty() );
ASSERT( IsValidIndex( row, column ) );
return m_data[ Map2DIndexIn1D( row, column ) ];
}
// Changes element at specified position
// (row and column are 0-based).
// It is possible to do chained calls
// e.g. myArray.SetAt(...).SetAt(...) ... .SetAt(...);
Array2D & SetAt( int row, int column, const T & value )
{
ASSERT( ! IsEmpty() );
ASSERT( IsValidIndex( row, column ) );
m_data[ Map2DIndexIn1D( row, column ) ] = value;
return *this;
}
//
// IMPLEMENTATION
//
private:
//
// DATA MEMBERS
//
std::vector< T > m_data; // Stores array data, in 1D array
int m_rows; // Number of rows
int m_columns; // Number of columns
//
// HELPER METHODS
//
// Checks if input position (row, column) is valid.
// Row and column are 0-based, like in raw C/C++ arrays.
bool IsValidIndex( int row, int column ) const
{
if ( row >= 0 && row < m_rows &&
column >= 0 && column < m_columns )
{
// Valid index
return true;
}
else
{
// Invalid index
return false;
}
}
// This class stores "virtual 2D" array data as internal 1D array.
// This helper method converts a 2D index (row, column)
// in a 1D index to be used for the internal array.
int Map2DIndexIn1D( int row, int column ) const
{
ASSERT( IsValidIndex( row, column ) );
// 2D ==> 1D conversion
//
// 2D array is stored row-wise, i.e.
// row0, row1, ..., row(N-1)
return (row * m_columns) + column;
}
};
</file>
HTH,
Giovanni
"Ricardo Furtado" <RicardoFurtado@discussions.microsoft.com> ha scritto nel
messaggio news:92F174E4-CBEF-42DC-8B3C-A245F909D9BD@microsoft.com...
I'm using MS Visual C++ 2008 and i'm trying to use an array containing
some
complex information, but the compiler states an error:
error C2440: 'Initializing': cannot convert from 'char (*)[17] to 'char
*'
my array is this:
char* Arr=new char[184][17];
Arr[0][0]="1";
Arr[0][1]="Basion";
Arr[0][2]="Ba";
Arr[0][3]="Basio.jpg";
Arr[0][4]="Basio.avi";
Arr[0][5]="Ponto mais inferior do contorno anterior do foramen Magnum";
Arr[0][6]="False";
Arr[0][7]="";
Arr[0][8]="";
Arr[0][9]="";
Arr[0][10]="True";
Arr[0][11]="False";
Arr[0][12]="";
Arr[0][13]="52";
Arr[0][14]="1";
Arr[0][15]="";
Arr[0][16]="False";
Arr[1][0]="2";
Arr[1][1]="Sella";
Arr[1][2]="S";
Arr[1][3]="Sela.jpg";
Arr[1][4]="Sela.avi";
Arr[1][5]="";
Arr[1][6]="False";
Arr[1][7]="";
Arr[1][8]="";
Arr[1][9]="";
Arr[1][10]="True";
Arr[1][11]="False";
Arr[1][12]="";
Arr[1][13]="68";
Arr[1][14]="1";
Arr[1][15]="";
Arr[1][16]="False";
... continues ...
I belive i'm not declaring correctly the array.
Can you help?
My thanks in advanced