在C ++中有一个数组bitshift运算符吗?

时间:2014-12-19 04:15:16

标签: c++ arrays bit-shift

有吗?例如:

unsigned long long myarray[4];
myarray <<= (8*sizeof(unsigned long long));
myarray[3] = my_new_value_at_front;

相当于:

unsigned long long myarray[4];
myarray[0] = myarray[1]; 
myarray[1] = myarray[2]; 
myarray[2] = myarray[3]; 
myarray[3] = 0;
myarray[3] = my_new_value_at_front;

如果不存在任何支持常量N元素的容器,当你在[N-1]推新的容器时,会不会转移?

3 个答案:

答案 0 :(得分:4)

没有。那没有。但我可以推荐更好的东西。试试std::deque

std::deque<unsigned long long> mydeque {0, 1, 2, 3};

for (const auto& x : mydeque )
    std::cout << x << " ";
std::cout << std::endl;

mydeque.pop_front();
mydeque.push_back(4);

for (const auto& x : mydeque )
    std::cout << x << " ";
std::cout << std::endl;

使用std::deque,您可以使用memeber函数pop_front删除第一个元素,并在后面插入push_back

答案 1 :(得分:2)

没有操作员,但你可以这样做:

std::rotate(myarray, myarray + N, myarray + 4);

其中N是应该移动到开头的元素的索引,其他参数是开始和结束。如果需要,您可以随后覆盖以后的元素。

在你的情况下:

std::rotate(myarray, myarray + 1, myarray + 4);
myarray[3] = my_new_value_at_front;

答案 2 :(得分:1)

对于裸阵列,这是不可能的,但考虑到您使用的是整数类型,您可以使用std::valarray,其中包括符合您要求的shiftcircular shift函数。它提供random access非常像裸阵列,但还有其他功能。