C++中用vectors改進(jìn)內(nèi)存的再分配
摘要:本文描述的是一種很常見的情況:當(dāng)你在某個緩存中存儲數(shù)據(jù)時,常常需要在運行時調(diào)整該緩存的大小,以便能容納更多的數(shù)據(jù)。本文將討論如何使用 STL 的 vector 進(jìn)行內(nèi)存的再分配。
這里描述的是一種很常見的情況:當(dāng)你在某個緩存中存儲數(shù)據(jù)時,常常需要在運行時調(diào)整該緩存的大小,以便能容納更多的數(shù)據(jù)。傳統(tǒng)的內(nèi)存再分配技術(shù)非常繁瑣,而且容易出錯:在 C 語言中,一般都是每次在需要擴(kuò)充緩存的時候調(diào)用 realloc()。在 C++ 中情況更糟,你甚至無法在函數(shù)中為 new 操作分配的數(shù)組重新申請內(nèi)存。你不僅要自己做分配處理,而且還必須把原來緩存中的數(shù)據(jù)拷貝到新的目的緩存,然后釋放先前數(shù)組的緩存。本文將針對這個問題提供一個安全、簡易并且是自動化的 C++ 內(nèi)存再分配技術(shù)——即使用 STL 的 vector。
用 STL vector 對象取代內(nèi)建的數(shù)組來保存獲取的數(shù)據(jù),既安全又簡單,并且是自動化的。
進(jìn)一步的問題分析
在提出解決方案之前,我先給出一個具體的例子來說明 C++ 重新分配內(nèi)存的弊病和復(fù)雜性。假設(shè)你有一個編目應(yīng)用程序,它讀取用戶輸入的 ISBNs,然后將之插入一個數(shù)組,直到用戶輸入 0 為止。如果用戶插入的數(shù)據(jù)多于數(shù)組的容量,那么你必須相應(yīng)地增加它的大。
#include
using namespace std;
int main()
{
int size=2; // 初始化數(shù)組大小;在運行時調(diào)整。
int *p = new int[size];
int isbn;
for(int n=0; ;++n)
{
cout<< "enter an ISBN; press 0 to stop ";
cin>>isbn;
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |