使用动态数组的简单地址簿

时间:2013-11-19 19:18:39

标签: c++ arrays memory dynamic allocation

我正在开展与C ++中“保持客户联系”相关的学校项目。 我已经使用std :: vector完成了我的项目,以存储每个添加的人的联系信息。但现在我必须使用DYNAMIC ARRAY写相同的东西。

有没有人有任何想法或示例代码如何声明动态数组能够根据用户添加的联系人数改变其维度?

我需要关注:  *声明动态阵列,具有未定义的人数和每个6个联系人。  *添加新联系人。  *列出阵列中的所有联系人。

我使用矢量完成了我的项目没有任何问题,但现在我迷路了。我研究了许多关于在c ++中使用动态数组但没有进展的文章。我正在互联网上搜索一段代码,它可以满足我的需求,但找不到任何东西。

3 个答案:

答案 0 :(得分:1)

虽然这与你的项目并不完全相同,但这是几天前我的,我们不得不使用" new"和"删除"名称字符串的方法。请记住,只要您使用" new"你需要有一个"删除"否则你会得到内存泄漏。我希望这会有所帮助。

#include <iostream>

using namespace std;

#include <memory.h>
#include <string.h> 
#include "ReadString.h"
#include "sort.h"


void main ()
{
bool contMain=true;
const long numNames=20;
long nameAc=0;
char ** ppNames;
ppNames=new char* [numNames];
char test;

while(contMain && nameAc<numNames)
{
    ppNames[nameAc]=ReadString();
    test=ppNames[nameAc][0];
    if(test=='\0')
    {
        contMain=false;
    }
    nameAc++;   
}
cout<<"Your names unsorted are:"<<endl;
print(ppNames, nameAc);
ppNames=sort(ppNames, nameAc);
cout<<"Your names, sorted, are:"<<endl;
print(ppNames, nameAc);


// deallocation... this will delete pNames and pTemp from the ReadString function
// as well as ppNames in main because they are all using the same pointers.
for(int i=0; i<nameAc; i++)
{
    delete ppNames [i];
}
delete[] ppNames;
}

这是ReadString函数。

#include <iostream>

#include <memory.h>
#include "ReadString.h"

using namespace std;


char * ReadString()
{
long aSize=10;
long numChars (0);
char * pNames;
char * pTemp;
char c;
pNames=new char [aSize+1];

while((c = cin.get()) != '\n')
{
    if(numChars >= aSize)
    {
        aSize += numChars;
        pTemp = new char[aSize + 1];
        memcpy(pTemp, pNames, numChars);
        delete[] pNames;
        pNames = pTemp;
        cout << "Array size increased to " << aSize << endl;
    }
    pNames[numChars++] = c;
}
pNames[numChars] = '\0'; //end of string
return pNames;

答案 1 :(得分:0)

您可以轻松使用的一件事是链接列表。您的数据结构有一个指向下一个列表元素的指针。

struct ListElement 
{
    CustomerData cutomer;
    ListElement *next;
}

您可以使用此类数据结构作为基础,添加用于添加删除,查找,打印全部等的基础结构。

另一种方式非常动态:

添加一个项目的示例:

  1. malloc内存与您已有的项目数量相同+ 1

  2. 将数据从旧内存复制到新内存

  3. 在+1分配的空间

  4. 中添加新项目

    你需要在开始时添加基础设施,最后在这个方案中删除中间的一个等。在更改后分配尽可能多的内存,复制旧数据,插入/删除一个项目。

    祝你的项目好运!

答案 2 :(得分:0)

我能做的最好的事情是建议文章的链接。听起来你的导师希望你使用一套更原始的工具以“艰难的方式”编写相同的程序。由于std :: vector本质上是一个动态数组,我不得不假设他希望你重写你必须手动管理内存的项目。以下是一些起点。请记住,谷歌是你的朋友!

C++ FAQ Lite

Dynamic Memory Cplusplus.com

LMGTFY