有吗?例如:
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]
推新的容器时,会不会转移?
答案 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
,其中包括符合您要求的shift和circular shift函数。它提供random access非常像裸阵列,但还有其他功能。