Сдвиг элементов массива с помощью побитового оператора - PullRequest
0 голосов
/ 05 августа 2020

Я новичок в программировании.

Я просто хочу знать, есть ли способ сдвинуть элементы массива с помощью побитового оператора? Может быть, с перегрузкой побитового оператора?

Если это возможно, почему мы не используем этот метод, когда побитовые операторы быстрее по сравнению с операторами arithmeti c?

Пример

int array[] {1, 2, 3};
array << 1; // -> array should become 2, 3, 1

1 Ответ

4 голосов
/ 05 августа 2020

Я просто хочу знать, есть ли способ сдвинуть элементы массива с помощью побитового оператора. Возможно, с перегрузкой побитового оператора.

Вы, вероятно, хотите сделать что-то вроде

int array[] {1, 2, 3};
array << 1; // -> array should become 2, 3, 1

Это невозможно. Для перегрузки оператора один из операндов должен иметь тип класса, но ни array, ни 1 не являются классами. Конечно, вы можете перегрузить этот оператор для контейнеров, таких как std::array или std::vector.

template<typename T, size_t N>
void operator<<(std::array<T, N> &arr, int n) {
    // shift things around, the implementation is up to you ;)
}

void foo() {
    std::array<int, 3> array {1, 2, 3};
    array << 1; // -> array becomes 2, 3, 1
}

Даже если возможно, почему мы не используем этот метод, в то время как побитовые операторы быстрее по сравнению с операторы arithmeti c?

Не уверен, что вы здесь имеете в виду. Перегрузка оператора битового сдвига (или любого другого оператора в этом отношении) не приводит к фактическому сдвигу битов, это просто интересный способ вызвать некоторую функцию.

...