如何在C ++中初始化一个空的对象数组?

时间:2017-09-17 12:14:14

标签: c++ arrays object initialization

我试图创建一个类Contact的空数组。从一个空数组开始,我想在AddrBook.cpp中创建一个函数,将Contact的对象添加到对象数组中,称为addressBook。

我是否在AddrBook.h中正确初始化数组?

如何检查特定索引处是否存在联系对象?

AddrBook.cpp

#include "AddrBook.h" 
namespace address_book_test
{
    const int CAPACITY = 5;

    void AddrBook::addContact(Contact& itemToAdd) // Add Contact to the AddrBook (using Contact object)
    {
        for (int i = 0; i < CAPACITY; i++)
        {
            if (/*Contact object does not exist at i*/)
            {
            /*Add Contact object*/
            return;
            }
        }
        return;
    }
...
}

AddrBook.h

#ifndef ADDR_BOOK_H
#define ADDR_BOOK_H

#include <fstream>
using namespace std;

#include "Contact.h"

namespace address_book_test
{
    class AddrBook
    {
    public:

        static const int CAPACITY = 5;

        // CONSTRUCTOR
        AddrBook() { used = 0; }

        // Modification Member Functions
        void addContact(Contact& itemToAdd); // Add Contact to the AddrBook (using Contact object)
...
    private:
        static Contact addressBook[CAPACITY]; // The array used to store Contact objects
        int used; // How much of addressBook is used
    };
}
#endif

Contact.cpp

#ifndef CONTACT_H
#define CONTACT_H

#include <fstream>
using namespace std;

#include "Address.h"
#include "Name.h"

namespace address_book_test
{
    class Contact
    {
    public:

        // Constructor
        Contact(string inLastName = "",
            string inFirstName = "", 
            string inStreetAddress = "",
            string inCity = "",
            string inState = "",
            string inZip = "",
            string inPhone = "",
            string inEmail = "",
            string inBirthday = "",
            string inPictureFile = "")
        {
            Name(inLastName, inFirstName);
            Address(inStreetAddress, inCity, inState, inZip);
            setPhone(inPhone);
            setEmail(inEmail);
            setBirthday(inBirthday);
            setPictureFile(inPictureFile);
        }
...
        private:
        Name fullName;
        Address fullAddress;
        string phone;
        string email;
        string birthday;
        string pictureFile;
    };
}
#endif

3 个答案:

答案 0 :(得分:2)

不要使用数组,请使用:

 std::vector<Contact> addressBook;

而不是

 static Contact addressBook[CAPACITY];

你真的需要将它定义为静态吗?

使用矢量,您不需要变量“used”。如果你想知道你有多少联系人,你只需要写

 addressBook.size();

现在,如果您想查找特定联系人,可以使用find:

 if(find(addressBook.begin(), addressBook.end(), my_contact) != addressBook.end()){
...
}

答案 1 :(得分:0)

你有一个名为&#39; used&#39;的变量,所以我想你想用这个变量来跟踪数组中填充的位数,那么你只需要在填充时增加该变量数组中的另一个空格,然后您可以通过执行以下操作来检查该点是否已被使用:if(i&gt; = used){} 您只需记住数组从索引0开始,当填充时,您使用的变量为1,因此它总是比上一个填充索引高一个。

答案 2 :(得分:0)

如果你想减少你的应用程序的内存占用量,你可以使用call_once来初始化你的向量,这是你第一次向地址簿添加一个元素

std::vector<Contact> addressBook;

void AddContact(string Contact) {
    std::call_once(onceFlag, [this] { this->addressBook.reserve(1000); cout << "size Reserved" << endl; });
    addressBook.push_back(Contact);
}

&#34;尺寸保留&#34;只会出现一次