我正在阅读关于deque(Deques)
的实现的文章以下是相应的代码:
template <class T>
class deque
{
public:
⋮
private:
size_type theSize;
T** blockmap;
size_type mapSize;
size_type firstBlock;
size_type firstElement;
const static size_type BlockSize = 4096;
static size_type numElementsInBlock;
};
template <class T>
deque<T>::dqPosition
deque<T>::indexAt (deque<T>::size_type n) const
{
dqPosition pos;
pos.blockNum = firstBlock;
if (n < numElementsInBlock - firstElement)
{
pos.elementNum = n + firstElement;
}
else
{
n -= numElementsInBlock - firstElement;
++pos.blockNum;
int k = n / numElementsInBlock;
pos.blockNum += k;
pos.elementNum = n - k*numElementsInBlock;
}
return pos;
}
在插图中,很明显firstBlock和firstElement的初始值是2。 为什么firstBlock和firstElement最初不是0?
答案 0 :(得分:1)
因为每次你想要从前面拿走deque的东西,你不想移动内存或将所有内容移回到位置0.所以你保留了deque的第一个块的索引。 / p>