문제

다이나믹 비트 세트

채워야하는 유스 케이스가 있습니다.

boost::dynamic_bitset<unsigned char> , from a std::string buffer.

이 문제를 해결하는 방법에 대해 제안해 주시겠습니까? 그래서 나는 기능을 생각해 내야합니다

void populateBitSet (std::string &buffer, 
            boost::dynamic_bitset<unsigned char> & bitMap) {

     //populate bitMap from a string buffer
}
도움이 되었습니까?

해결책

다음과 같은 이진 데이터가있는 경우 :

string buffer = "0101001111011";

당신은 이것처럼 초기화하고 싶습니다 ( 건설자 이 경우를 처리합니다) :

void populateBitSet (std::string &buffer, boost::dynamic_bitset<unsigned char> & bitMap) 
{        
   bitMap = boost::dynamic_bitset<unsigned char> (buffer);
}

원시 데이터를 원한다면 사용하십시오 반복자 생성자:

void populateBitSet (std::string &buffer, boost::dynamic_bitset<unsigned char> & bitMap) 
{        
   bitMap = boost::dynamic_bitset<unsigned char> (buffer.begin(), buffer.end());
}

이들은 필요한 메모리를 두 번 할당하게되므로 스택 할당과 스왑으로 더 나을 수 있습니다. 또는 C ++ 0X까지 기다릴 수 있고 이동 의미론이 자신의 일을하도록 할 수 있습니다.

// Unecessary in C++0x
void populateBitSet (std::string &buffer, boost::dynamic_bitset<unsigned char> & bitMap) 
{        
   boost::dynamic_bitset<unsigned char> localBitmap(buffer.begin(), buffer.end());
   bitMap.swap(localBitmap);
}

편집 : 첫 번째 버전이 메모리의 두 배를 할당하는 이유를 명확히하기 위해 :

첫 번째 버전을 작성하는 다른 방법을 살펴보십시오.

typedef boost::dynamic_bitset<unsigned char> bits; // just to shorten the examples.
void populateBitSet (std::string &buffer, bits &bitMap) 
{        
   const bits &temp = bits(buffer); // 1. initialize temporary
   bitMap = temp; // 2. Copy over data from temp to bitMap
}

첫 번째 예에서와 같이이 두 줄을 정리하면 스택에 임시로 구성된 다음 과제가 이어집니다. 1. 부스트는 전체 비트 세트에 충분한 메모리를 할당해야합니다. 2에서 부스트는 동일한 비트 세트를 유지하고 값을 복사 할 수있는 충분한 메모리를 다시 할당해야합니다. 비트 맵에 이미 충분한 메모리가있을 수 있으므로 항상 재 할당 할 필요는 없지만 어쨌든 백업 메모리를 해제하고 처음부터 재 할당 할 수도 있습니다.

STL 금형에 맞는 대부분의 컨테이너에는 스왑의 한쪽을 버릴 때 할당 대신 사용할 수있는 스왑 기능이 있습니다. 이들은 일반적으로 O (1)과 비 던지기입니다. 이것 좀 봐 gotw 이것들이 유용한 또 다른 이유로.

C ++ 0X에서는 할당을 사용할 수 있으며 여전히 스왑의 장점을 얻을 수 있습니다. R- 값 (임시와 같은)에 과부하 할 수 있으므로 컨테이너는 임시를 할당 할 때 온도를 식인질하고 기본적으로 스왑을 수행 할 수 있음을 알고 있습니다. Visual Studio Team 블로그는 RValues를 다루고 Semantics를 사용했습니다. 꽤 잘 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top