Circular Queue using Dynamic Array

I'm learning data structures from "Fundamentals of Data structures in C" by Sahni . In the topic, Circular Queue using Dynamic Array, the author has mentioned below point,

Let capacity be the initial capacity of the circular queue,We must first increase the size of the array using realloc,this will copy maximum of capacity elements on to the new array. To get a proper circular queue configuration, we must slide elements in the right segment(i.e, elements A and B) to the right end of the array(refer diagram 3.7.d). The array doubling and the slide to the right together copy at most 2 * capacity -2 elements.

I understand array doubling copies at most capacity elements. But how does array doubling and slide to right copy at most 2 * capacity -2 elements??

I think the author is just saying the circular list has capacity of $$n-1$$ where $$n$$ is the total cells. When the array is doubled there is copying of these $$n-1$$ elements to new array in addition with shifting of these $$n-1$$ elements in the worst case, thus making it total $$2n-2$$ doubling and sliding in the worst case.
• (A [data structure instance] can have capacity - 1 elements sounds a fun definition of capacity.) "The -1" is an artefact of an implementation just keeping two indices besides "the array". More element copies than there are valid elements is sub-standard (in the eyes of this not-so-humble coder). Sep 1, 2020 at 4:32