Я просто хочу знать, есть ли способ сдвинуть элементы массива с помощью побитового оператора. Возможно, с перегрузкой побитового оператора.
Вы, вероятно, хотите сделать что-то вроде
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?
Не уверен, что вы здесь имеете в виду. Перегрузка оператора битового сдвига (или любого другого оператора в этом отношении) не приводит к фактическому сдвигу битов, это просто интересный способ вызвать некоторую функцию.