나는 16000 X 9000 단위의지도를 가지고있는 게임을하고 있습니다.지도상의 어떤 지점 X, Y에 있다면, 2000 단위의 반경까지 볼 수 있습니다. 특정 지역을 방문했는지 여부를 관리 할 수있는 무언가가 필요했습니다. 주된 질문은 내가 여러 개의 bool을 가져야 하는가? 방문한 너무 큰 bool 일 것입니다 [16000 * 9000]. 고마워, 고마워. 내가 stackoverflow에 미안 해요, 내가 미안하다면 미안해.C++의 방문 좌표를위한 배열
1
A
답변
0
bool
유형의 배열을 사용하는 것은 실제로 비효율적입니다. 주로 C++의 bool
크기가 화려하게 커질 수 있기 때문입니다. (제 플랫폼에서는 길이가 8 비트이므로 7 비트가 사용되지 않습니다.) C++ 표준은 sizeof(bool)
의 값을 지정하지 않습니다.
std::vector<bool>
대신 : 더 낭비되는 공간이없는 즉이이 단단하게 포장된다
std::vector
의 명시 적 전문성과 C++ 표준
보장입니다.
은 하나의 연속적인 메모리 블록을 얻기가 어려울 경우
std::vector<std::vector<bool>>
이 필요합니다. 이것은 모든 너무 다이빙하기 전에주의 깊게 고려 않는 일부 사람들은 복수와
bool
벡터 전문화를 싫어했다. (중단을 위해 일정을 고려하는 움직임이있다!)
또는 수 그래프의 덩어리 지역 unsigned
과 같은 필수 유형 세트로 함께 결합하십시오.
1
발견 된 영역이 원형이어야합니다 ('반경'이 사용 된 것임).이 거대한 arry를 사용해야합니다. 예.
완벽한 원 일 필요가없는 경우 간단히 말해서 10 블록의 거칠기를 사용한다고 가정하면 1600x90 크기의 배열 만 있으면 완벽한 원과 비교하여 100 배 감소됩니다.
'144MB'입니다. 만약 당신이 염려한다면, 당신은'vector '을 사용할 수 있으며, 최적화 때문에 아마'18 MB' 만 필요할 것입니다. –
alexeykuzmin0
18MB는 요즘 많지 않습니다. – nate
'16000 * 9000'은 약'137 * 2^20'이므로, 오늘날의 일반적인 개인용 컴퓨터의 RAM에 저장할 수 없을만큼 커야합니까? – MikeCAT