什麼是正確的方式來返回一個向量的底層緩衝區時沒有元素還在它(size() == 0)
。我先撥打vector.reserve()
,這樣就分配了內存。引用保留向量中的第一個元素
我試過以下,但它給出了不同的指針值,我期望是相同的值。從我用google搜索起來,似乎.front()
和.data()
在size()
爲零時未定義。我需要獲得一個指向vector的指針,以便我可以將它傳遞給C函數。
int main() {
std::unique_ptr<std::vector<int>> vec(new std::vector<int>(10));
std::cout << std::hex
<< (uint64_t)&vec.get()[0] << " "
<< (uint64_t)&vec->front() << " "
<< (uint64_t)vec->data() << std::endl;
return 0;
}
輸出:
2b324a4cec20 2b324a4cec40 2b324a4cec40
如果你運行GCC這個代碼,.data()
返回0。然後,標準說front()
未定義因爲size()
是0 。你可以看到指針值不同。到底是怎麼回事?
你有一個*指針*給vector的原因是什麼?通常不需要。 –
這是不可能的,你只允許引用存在的元素。即使分配了存儲空間,data()函數也可能爲空向量返回空指針。 –
這是用在一個非常複雜的情況下,我用自定義分配器使用矢量,並且矢量的初始化需要延遲,因爲它是一個成員變量(並且分配器不是默認可構造的)。 –