user6683031
user6683031

Reputation:

Array for visited co-ordinates in c++

I am working on a game which has a map of 16000 X 9000 units, If I am at any point X,Y on map, I can see upto a radius of 2000 units. I wanted something from which I could manage whether I've visited a particular region or not. The main question is Should I take an array of bools? It will be too large bool visited[16000*9000]. So wanted advise, thanks. I am new to stackoverflow, sorry if I am not to the point.

Upvotes: 1

Views: 925

Answers (2)

Bathsheba
Bathsheba

Reputation: 234785

It would indeed be inefficient to use an array of bool types. Mainly because the size of a bool in C++ can be luxuriously big. (On my platform, it's 8 bits long which means that 7 bits of it are not used.) The C++ standard does not specify the value of sizeof(bool).

Do consider using a std::vector<bool> instead: this is an explicit specialisation of std::vector and the C++ standard guarantees this is tightly packed: i.e. there is no wasted space. You might need a std::vector<std::vector<bool>> if you have difficultly acquiring one contiguous block of memory. This all said, some folk dislike the bool vector specialisation with a vengeance so do consider this carefully before diving in. (There is a movement to consider scheduling it for deprecation!)

Or you could lump areas of your graph together yourself into a set of integral types such as unsigned.

Upvotes: 0

Stephan G&#252;nther
Stephan G&#252;nther

Reputation: 11

If you need the discovered region to be circular (which your use of 'radius' implies) you have to use this huge arry, yes.

If it does not have to be a perfect circle, then you can simply downsample: say you use a roughness of 10 blocks - then you only need an array of 1600x90 size - a factor 100 reduction compared to the perfect circle.

Upvotes: 1

Related Questions