我试图创建一个类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
答案 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;只会出现一次