2014-12-19 3 views
-3

있습니까? 하지 일정한 N 요소를 지원하고 [N-1]에 새로운 하나를 누르면 다음 everithing 이동됩니다 어떤 용기가있는 경우C++에서 비트 시프트 연산자가 있습니까?

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; 

: 예를 들면 :

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

는 동등 것입니까?

+2

사람들은 C 배열입니다. C++ 컨테이너 클래스를 사용한다면 운이 더 좋을 것입니다. – tadman

+2

아니요. 그리고 이것은 "비트 시프트 (bithift)"가 아니며, 배열 이동 일 것입니다. –

+0

아니요, 그렇습니다. 가장 가까운 것은 ['std :: bitset :: operator <<()'] (http://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt)입니다. –

답변

2

아무 운영자 없습니다하지만 당신은 할 수 있습니다.

N이 시작로 이동해야되는 요소의 인덱스입니다
std::rotate(myarray, myarray + N, myarray + 4); 

, 다른 인수는 시작과 끝입니다. 원하는 경우 나중에 요소를 덮어 쓸 수 있습니다.

귀하의 경우에는

:

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

을 참조하십시오. 컨테이너에 무관심하기 때문에 대답이 내 것보다 나을 수도 있습니다. –

+0

@NickyC는 상황에 따라 다릅니다. 그가 할 일이 그들을 덮어 쓴다면 내 물건이 불필요하게 움직일 것이다. –

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으로, 당신은 첫 번째 요소를 제거하는 일원이 기능 pop_front를 사용할 수 있으며, push_back는 뒷면에 삽입 할 수 있습니다.

+0

deque에 임의 액세스 권한이 없습니까? –

+0

@BenVoigt'std :: deque'는 랜덤 액세스입니다. http://en.cppreference.com/w/cpp/container/deque –

1

알몸 배열에서는 불가능하지만 필수 유형을 사용한다고 가정하면 shift 및 요구 사항을 충족하는 circular shift 함수가 포함 된 std::valarray을 사용할 수 있습니다. 그것은 벌거 벗은 배열처럼 많이 있지만 추가 기능을 random access가 던져 제공