2012-02-29 2 views
2

두 개의 C++ 비트 세트에 대해 질문하고 싶습니다.C++ bitset questions

(1) 함수 인수에서 지정된 길이의 비트 세트를 만드는 방법은 무엇입니까? 나는 말은, 예를 들어, 내가 가진

void f(int n) 

그리고 f 내부

, 나는 bitset<n> bs;를 작성해야하는 기능이 무엇인가를 행할 수 있습니까?

(2) 비트 세트 bs의 일부를 복사하여 새 비트 세트를 형성하는 방법은 무엇입니까? i1> = i2, 내가 포함 최소 i1 일 최상위 비트에 단독으로 가장 i2 일 정도 비트에서 bs에서 그 비트를 복사하여 새 비트 세트를 형성하기 위해 필요로하는 곳에 예를 들어, starting index i1ending index i2을 부여 (단지 STL 규칙을 준수합니다) .

감사합니다.

+2

이들은 드로이드 비트셋이 아닙니다. 놀랍게도, 당신은'벡터 '을 찾고 있습니다. –

답변

2

(1) 크기가 컴파일시 상수 (정수 상수 표현식) 여야하기 때문에 std::bitset으로 처리 할 수 ​​없습니다. 당신은 대안 std::vector<bool> 또는 std::vector<char>

(2) std::bitset은 당신이 찾고있는 무엇을위한 특별한 생성자를하지 않습니다, boost::dynamic_bitset 사용하거나 할 수 있습니다. 명시 적 루프를 작성해야합니다. 그러나 (1)에 나열된 다른 모든 옵션에는 두 개의 반복자를 사용하는 생성자가 있습니다.

+0

만약'std :: vector '을 사용한다면 비트 셋의'to_ulong()'처럼 쉽게 변환 할 수 있을까요? –

+0

@littleEinstein :'boost :: dynamic_bitset'을 사용하십시오. 'to_ulong' 함수가 있습니다. vector를 사용한다면, 직접 함수를 구현해야한다. –

+0

@littleEinstein'unsigned long leftShiftAdd (unsigned long total, bool bit)와 함께'std :: accumulate'를 사용하라. {total << 1; if (bit) total | = 1; 총계를 돌려 보내십시오; }'. –

1

부스트를 사용할 수 있습니까? 그렇다면 boost :: dynamic_bitset이 필요할 수도 있습니다. 그렇지 않다면 std::vector<bool>이 작동 할 수 있습니다. 내부적으로 bool 벡터가 아닌 비트 세트로 저장되므로 std :: copy를 사용하여 비트 범위를 복사 할 수 있어야합니다.

0

첫 번째 질문은 : 정확히 당신이 원하는 것입니다 Boost.Dynamic Bitset가 있습니다.

두 번째 질문은 여기에서 간단히 (bs >> i2) & ~bitset(i1 - i2)입니다.