2009-10-26 5 views
1

stls, boosts 등을 사용하지 않고 배열의 요소를 회전하려고했습니다. 효율성을 위해 mod 연산자를 사용하려고했습니다.mod 연산자 사용 C++

void stack::rotate(int r) 
{ 
r = (r % maxSize + maxSize) % maxSize; 
for (int first_index = 0; first_index < r; ++first_index) 
{ 
    int mem = items[first_index].n; 
    int index = (first_index + r) % maxSize, index_prev = first_index; 
    while (index != first_index) 
    { 
    items[index_prev] = items[index]; 
    index_prev = index; 
    index = (index + r) % maxSize; 
    } 
    items[index_prev].n = mem; 
} 

items는 항목 struct에 할당 된 배열입니다. 조금 이상하지만 항목 구조체는 정수형 'n'멤버를 가지고 있으므로 정수형 변수와 함께 사용할 수 있습니다.

답변

2

팁 :

추가 주장 (rmaxsize가 0이,?, 0이 아닌 등을보다 maxsize 긍정적이다)

쓰기 시험이 문서에 관심이있을 수 있습니다 이 함수는 쉬운 배열에서 시작하여 위로 올라간다. 그들을 버리지 마라. 그것들을 쓰고 모든 것을 연속적으로 운영하라.

변수에 명확한 이름을 지정하십시오.

r을 다시 사용하지 마십시오.

코드가 너무 어둡게 보입니다. 첫눈에 그것은 "여기에있는 한 가지 실수로 벗어난다!"울고있다. 가능한 모든 경계 오류를 주장하십시오.

더 자세한 답변을 원하시면 의 비트를 "여전히 꺼내지 않을 것"으로 확장해야합니다.

4

가에서 적절한 배열 회전이보기보다 까다 롭습니다;

는하지만 여전히 잘 = 밖으로오고 없습니다 (.. 내 두 번째 요소의 내용을 잃는 임 나는 그것의 휴식 시간을 생각한다).

http://www.azillionmonkeys.com/qed/case8.html