2015-01-25 2 views
0

각 실행 프로그램에서 서로 다른 크기를 가질 수있는 두 개의 std :: bitset에 N 개의 다른 부울 연산자를 수행하는 함수를 작성해야합니다. 그래서 내부에서 연산을 수행하고 비트 셋 배열을 반환하는 함수를 작성하려고 시도했지만 리턴 값을 어떻게 정의해야하는지 모르겠습니다.반환 값으로 std :: bitset 배열

template<size_t SIZE> 
    .... bitwiseOperator(bitset<SIZE> r_1, bitset<SIZE> r_2, vector<int> fun) 
    { 
     int k = 0; 
     bitset<SIZE> r_12; 
     const int N = fun.size(); 
     bitset<SIZE> rs[N]; 
     for(vector<int>::iterator it = fun.begin(); it != fun.end(); ++it) 
     { 
     if (*it == 1)   
     { 
       r_12 = r_1 & r_2; 
     } 
     else if(*it == 2) 
     { 
       r_12 = r_1 | r_2; 
     } 
     else if(*it == 3) 
     { 
       r_12 = r_1^r_2; 
     } 
     rs[k] = r_12; 
     k++; 
    } 
     return rs; 
    } 

나는 비트 세트 [N] 같은 당신이 변수 크기의 배열이 std::vector를 사용하여 제안 반환 할 것을

+0

무엇을 [표준 : array''] (http://en.cppreference.com/w/cpp/container 출력 반복자 – Columbo

+1

제공에 대해 /정렬)? – Pradhan

+2

'sizeof (fun)'는 아마 실수 일 것입니다. 'fun.size()'를 의미 했습니까? (벡터의 요소 수) –

답변

1

사실을 수 반환 값이 필요합니다.

그래서 아마 이런 짓을 했을까 :

template<size_t SIZE> 
std::vector<std::bitset<SIZE> > bitwiseOperator(bitset<SIZE> r_1, 
    bitset<SIZE> r_2, vector<int> fun) 
{ 
    int k = 0; 
    bitset<SIZE> r_12; 

    const int N = fun.size(); // not sizeof(fun); !!! 

    std::vector<std::bitset<SIZE> > rs(N); // Variable size suggests std::vector 

    for(vector<int>::iterator it = fun.begin(); it != fun.end(); ++it) 
    { 
     if(*it == 1) 
     { 
      r_12 = r_1 & r_2; 
     } 
     else if(*it == 2) 
     { 
      r_12 = r_1 | r_2; 
     } 
     else if(*it == 3) 
     { 
      r_12 = r_1^r_2; 
     } 
     rs[k] = r_12; 
     k++; 
    } 
    return rs; 
} 
+0

나는 당신이 말하고있는 것을 완전히 이해하고있다. 그러나 나의 관심은 성능이다. 그렇지 않다면 나는 이미 numpy로 코드를 구현했고 잘 동작한다. (성능을 제외하고). 그래서 여기에 나는 정말로 벡터 사용을 피하고자한다. – Am1rr3zA

+0

나는 벡터가 로우 배열보다 느릴지 모르기 때문에 약간의 테스트를하는 것을 추천한다. 벡터는 기본 배열이며 함수 호출은 최적화 될 가능성이 큽니다. – Galik

+0

@ Am1rr3zA 첫째로 많은 선택의 여지가 없습니다. 배열은 C++에서 값으로 반환 될 수 없으며 배열은 컴파일시 알려진 크기 여야합니다. 두 번째로 성과에 대한 결론으로 ​​뛰어 오르지 마십시오. –