I wanted to declare a 2D array and assign values to it, without running a for loop.
I thought I could used the following idea
int array[5] = {1,2,3,4,5};
Which works fine to initialize the 2D array as well. But apparently my compiler doesn't like this.
/*
1 8 12 20 25
5 9 13 24 26
*/
#include <iostream.h>
int main()
{
int arr[2][5] = {0}; // This actually initializes everything to 0.
arr [1] [] = {1,8,12,20,25}; // Line 11
arr [2] [] = {5,9,13,24,26};
return 0;
}
J:\CPP\Grid>bcc32.exe Grid.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Grid.cpp:
Error E2188 Grid.cpp 11: Expression syntax in function main()
Error E2188 Grid.cpp 12: Expression syntax in function main()
Warning W8004 Grid.cpp 14: 'arr' is assigned a value that is never used in funct ion main()
* 2 errors in Compile *
Please help as to what is the right way to initialize the 2d array with my set of values.
The proper way to initialize a multidimensional array in C or C++ is
You can use this same trick to initialize even higher-dimensional arrays if you want.
Also, be careful in your initial code - you were trying to use 1-indexed offsets into the array to initialize it. This didn't compile, but if it did it would cause problems because C arrays are 0-indexed!
One alternative is to represent your 2D array as a 1D array. This can make element-wise operations more efficient. You should probably wrap it in a class that would also contain width and height.
Another alternative is to represent a 2D array as an
std::vector<std::vector<int> >
. This will let you use STL's algorithms for array arithmetic, and the vector will also take care of memory management for you.Just want to point out you do not need to specify all dimensions of the array.
The leftmost dimension can be 'guessed' by the compiler.
int iArray[2][2] = {{1, 2}, {3, 4}};
Think of a 2D array as an array of arrays.
Like this:
This should be covered by your C++ textbook: which one are you using?
Anyway, better, consider using
std::vector
or some ready-made matrix class e.g. from Boost.