在C 中使用std::vector 重新分配記憶體
在C 中,記憶體的重新分配長期以來一直是一個爭論的問題。與提供 realloc 函數的 C 不同,C 提供了 new 和 delete 來進行記憶體分配和釋放,但沒有明確的重新分配函數。
為了解決這個問題,許多 C 程式設計師採取了刪除舊記憶體的繁瑣過程。指針並分配一個新指針,可能會導致碎片和性能低下。然而,有一個使用標準庫容器的更有效率和現代的解決方案:std::vector。
使用 std::vector 重新分配緩衝區
重新分配在 C 中的緩衝區,您可以使用 std::vector 容器。考慮 C:
Type* t = (Type*)malloc(sizeof(Type)*n) memset(t, 0, sizeof(Type)*m)
中的以下程式碼片段,它為 Type 類型的 n 個元素分配記憶體並將它們初始化為 0。這可以用以下 C 程式碼取代:
std::vector<Type> t(n, 0);
它建立一個包含 n 個類型為 Type 的元素的向量 t 並將它們初始化為 0。
調整大小Vector
要調整向量的大小,可以使用 resize 成員函數。例如,要將 t 的大小增加到 n2,您可以使用:
t.resize(n2);
這相當於使用 C 中的 realloc 函數。
將向量傳遞給函數
如果要將向量傳遞給函數,可以使用語法 t.data() 來取得指標到底層數組。這類似於在 C 中傳遞指向已分配記憶體的指標。例如:
Foo(t.data())
結論
使用 std::vector 提供了一種高效且現代的方法C 中的記憶體重新分配。它消除了手動刪除和分配記憶體的需要,簡化了調整大小操作,並允許輕鬆地將向量傳遞給函數。
以上是std::vector 如何解決 C 的記憶體重新分配挑戰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!