0
以下功能允許在一個C-向量執行一個給定的槽插入的元件:如何確定內存插槽是否填充到C矢量中?
void CVectorInsert(CVector *cv, const void *elemAddr, int atIndex)
{
assert(0 <= atIndex && atIndex <= cv->capacity);
if (cv->numElements >= cv->capacity) {
CVectorGrow(cv);
}
memmove((char *)cv->vector + (atIndex + 1) * cv->elemSize, (char *)cv->vector + atIndex * cv->elemSize, cv->elemSize * (cv->numElements - atIndex));
memcpy((char *)cv->vector + atIndex * cv->elemSize, elemAddr, cv->elemSize);
(cv->numElements)++;
}
如果atIndex
位置已被填充,並且我需要騰出空間的元素移動,但是如果atIndex
位置沒有被填滿,我只需要memcpy
這個元素; 的CVector是如何定義的高elevel的想法:
struct CVectorImplementation {
int numElements;
int capacity;
int elemSize;
void *vector;
CVectorCleanupElemFn cleanupFn;
};
我怎麼能確定atIndex
插槽已經被填充或不?
你能告訴我更多關於它嗎? – cybertextron 2013-05-01 01:00:42
@philippe int furthestIndex = 0;並在插入時檢查/更新 – Patashu 2013-05-01 01:06:38