【c++小程序】1.动态数组实现图书录入程序

来源:互联网 发布:淘宝上代购靠谱的店铺 编辑:程序博客网 时间:2024/05/18 00:38

在图书馆中经常会遇到图书信息录入的问题,在录入图书信息之前,通常不知道图书数目是多少,那么要申请多少空间来存储图书呢,你当然可以申请一个很大的空间来存储,但是这有两个问题,一是如果图书很少,那么很多空间将本浪费,二是随着后来新增图书,到了申请的空间都装不下的地步,你就不得不重新申请空间,将所有数据再录入一次(当然在实际中是不会遇到这样问题的,因为我们通常将信息存储到文件或者数据库中,这样就可以共享了,这个例子只是为了说明动态数组的作用)。有了动态数组,你将不用再担心这两个问题,你可以随着图书的增多动态申请更多空间去存储图书。一个简单的例子如下:

#include <iostream>#include <string>#define stepLength 3  //定义图书仓库长度增长步长using namespace std;typedef struct{//定义图书结构,简单起见只简单包含图书名字和价格    string name;    int price;}book;int max = 3;   //定义当前图书仓库最大长度int counter = 0; //当前图书仓库中的图书数目book *storage;  //定义图书仓库void add(string name, int price);//定义添加图书的函数int main(){    storage = new book[max];//初始化仓库,申请能存储max个图书的空间    for (int i=0;i<=9;i++){//添加9本书        string name = "book" + to_string(i);        add(name, i);//简单地使用booki和i作为参数填充书本    }    cout << "+--------------book list------------+" << endl;    for (int i = 0; i<counter; i++){   //打印添加的书单        cout << "| " << storage[i].name << "    " << storage[i].price << endl;    }    system("pause");}void add(string name, int price){    if (counter < max){   //判断当前书本数目,若小于仓库大小,说明还有空间,则直接添加书籍        storage[counter].name = name;        storage[counter].price = price;        counter++;        cout << "书籍-->name:  " << name << ",  price:  " << price << "添加完毕..." << endl;    }    else{//否则,说明空间不够了,添加不进去了        cout << "空间不足,正在申请空间..." << endl;        max += stepLength;//增大空间容量        book *temp = new book[max];//申请更大空间        for (int i = 0; i<counter; i++){//将原来的数据数据复制到新申请的空间中            temp[i].name = storage[i].name;            temp[i].price = storage[i].price;        }        delete[] storage;//别忘了释放原来的空间,否则将造成内存泄漏        storage = temp;//将仓库指向新申请的空间        cout << "空间申请完毕,正在添加书籍..." << endl;        add(name, price);//再添加刚刚添加不进去那本书    }}

程序中初始空间大小为3本书大小,增长步长为3,当要录入9本书是,输出为:

书籍–>name: book0, price: 0添加完毕…
书籍–>name: book1, price: 1添加完毕…
书籍–>name: book2, price: 2添加完毕…
空间不足,正在申请空间…
空间申请完毕,正在添加书籍…
书籍–>name: book3, price: 3添加完毕…
书籍–>name: book4, price: 4添加完毕…
书籍–>name: book5, price: 5添加完毕…
空间不足,正在申请空间…
空间申请完毕,正在添加书籍…
书籍–>name: book6, price: 6添加完毕…
书籍–>name: book7, price: 7添加完毕…
书籍–>name: book8, price: 8添加完毕…
空间不足,正在申请空间…
空间申请完毕,正在添加书籍…
书籍–>name: book9, price: 9添加完毕…
+————–book list————+
| book0 0
| book1 1
| book2 2
| book3 3
| book4 4
| book5 5
| book6 6
| book7 7
| book8 8
| book9 9
请按任意键继续…

可见,当录入3本书时,空间就被填满了,程序会自动申请更多空间(+3个),以满足需求,在实际中肯定不会将步长设置为3,这太短了,因为新申请一次空间的开销是很大的,需要将原来的数据从新填入新申请的空间中,步长多少还要看实际应用。

原创粉丝点击