Имам проблем с писането на функция за завъртане на кръгъл масив. Трябва да го завъртя на място (без временни масиви) и трябва да преместя възможно най-малко елементи. За основна информация класът "Quack" е просто опашка, смесена със стек. Така елементите могат да се избутват и изскачат от двата края на кръговия масив. Ето какво имам досега:
void Quack::rotate(int r)
{
front = (front + capacity + r) % capacity;
back = (back + capacity + r) % capacity;
}
front и back са int, които действат като индекси за масива. r е количеството за ротация. капацитетът е максималният размер на масива.
Проблемът е, че ако масивът има "боклук" стойности в него, в крайна сметка ги завъртам в масива. Например да кажем, че ДЕЙСТВИТЕЛНИЯТ масив от знаци е {a, b, c, d, e, f, g}, а предната част е 5, а задната част е 3. Ако отпечатам кръговия масив, ще видя {f, g, a , b, c, d}. Тъй като отпред е 5, а отзад е 3, индексът 4 е "боклук" стойност (изскочи в някакъв момент). Така че моята функция за завъртане, както е сега, има проблем в това, че индекс 4 се "завърта". Ако завъртя масива с 2, ДЕЙСТВИТЕЛНИЯТ масив все още е {a, b, c, d, e, f, g}, освен сега, когато го отпечатам, тъй като предната и задната част са различни, получавам {a, b, c , d, e, f}. Това, което искам да видя, е {a, b, c, d, f, g}. Моята функция за печат просто отпечатва отпред назад (обвивайки, ако е необходимо), така че имам нужда от моята функция за завъртане, за да премахна по някакъв начин стойността на боклука.
Мисля, че трябва да преместя задните елементи, за да имам последователни стойности без боклук в средата. Но не съм сигурен как да го направя.
std::rotate
? cplusplus.com/reference/algorithm/rotate - person 101010   schedule 05.05.2014std::copy
, за да копирате останалата част в новооткритата територия. между другото, тъй като стандартната библиотека на C++ не предлага тази функционалност, тя има много малко или нищо общо със C++. защо тагът C++? - person Cheers and hth. - Alf   schedule 05.05.2014