C++ 如何在C++;?

C++ 如何在C++;?,c++,arrays,object,initialization,C++,Arrays,Object,Initialization,我试图创建一个空的Contact类对象数组。从一个空数组开始,我想在AddrBook.cpp中创建一个函数,将联系人对象添加到对象数组中,称为addressBook 我是否在AddrBook.h中正确初始化了数组 如何检查特定索引中是否存在联系人对象 AddrBook.cpp #include "AddrBook.h" namespace address_book_test { const int CAPACITY = 5; void AddrBook::addContac

我试图创建一个空的Contact类对象数组。从一个空数组开始,我想在AddrBook.cpp中创建一个函数,将联系人对象添加到对象数组中,称为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”
名称空间地址\u书籍\u测试
{
常数int容量=5;
void AddrBook::addContact(Contact&itemToAdd)//将联系人添加到AddrBook(使用Contact对象)
{
对于(int i=0;i
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
\ifndef ADDR\u BOOK\H
#定义地址簿
#包括
使用名称空间std;
#包括“Contact.h”
名称空间地址\u书籍\u测试
{
类AddrBook
{
公众:
静态常数int容量=5;
//建造师
AddrBook(){used=0;}
//修改成员函数
void addContact(Contact&itemtoad);//将Contact添加到AddrBook(使用Contact对象)
...
私人:
静态联系人通讯簿[容量];//用于存储联系人对象的数组
int used;//使用了多少地址簿
};
}
#恩迪夫
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
#如果没有联系#
#定义联系人
#包括
使用名称空间std;
#包括“Address.h”
#包括“Name.h”
名称空间地址\u书籍\u测试
{
班级联系
{
公众:
//建造师
联系人(字符串inLastName=“”,
字符串inFirstName=“”,
字符串inStreetAddress=“”,
字符串inCity=“”,
字符串inState=“”,
字符串inZip=“”,
字符串inPhone=“”,
字符串inEmail=“”,
字符串inBirthday=“”,
字符串inPictureFile=“”)
{
名称(inLastName,inFirstName);
地址(inStreetAddress、inCity、inState、inZip);
固定电话;
setEmail(inEmail);
受挫日(出生日);
setPictureFile(输入图片文件);
}
...
私人:
全名;
地址完整地址;
字符串电话;
字符串电子邮件;
弦乐生日;
字符串图片文件;
};
}
#恩迪夫
不要使用数组,请使用:

 std::vector<Contact> addressBook;
你真的需要把它定义为静态的吗

对于vector,您不需要变量“used”。如果你想知道你有多少联系人,你只需要写一封信

 addressBook.size();
现在,如果要查找特定联系人,可以使用“查找”:

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

您有一个名为“used”的变量,所以我猜您想使用这个变量来跟踪数组中已填充的位置,然后您只需在填充数组中的另一个空间时增加该变量,然后您就可以通过执行以下操作来检查该点是否已被使用:if(I>=used){
你只需要记住数组从索引0开始,填充时使用的变量是1,因此它总是比上次填充的索引高一个。

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

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);
}
std::向量地址簿;
void AddContact(字符串触点){

std::call_一次(onceFlag,[this]{this->addressBook.reserve(1000);数组不能有固定的大小。不能有空数组。它始终具有确切的
容量
元素数。如果需要更改大小,请使用
std::vector
。在
i
位置已经存在一个对象。唯一可以做的是用副本覆盖它。
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);
}