2015-01-25 2 views
0

Мне нужно написать функцию для выполнения N разных булевых операторов на двух std :: bitset, которые в каждой программе запуска могут иметь разный размер. поэтому я попытался написать функцию, которая выполняет операцию внутри и возвращает массив битов, но я не знаю, как определить возвращаемое значение?массив 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; 
    } 

мне нужно возвращаемое значение, чтобы быть что-то вроде BITSET [N]

+0

насчет предоставления итератора вывода – Columbo

+1

[ 'станд :: array'] (http://en.cppreference.com/w/cpp/container/массив)? – Pradhan

+2

'sizeof (fun)', вероятно, ошибка. Вы имели в виду 'fun.size()'? (число элементов в векторе) –

ответ

1

Тот факт, что вы хотите вернуть размер массива переменной предполагает использование std::vector.

Так что я бы, наверное, сделать это:

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++, а массивы должны иметь размер, известный во время компиляции. Во-вторых, не подходите к выводам о производительности. –