я действительно не получаю поля шаблона std::vector, первый указывает тип, например класс, но я не получаю распределитель, указатель и ссылочные переменные.
я приведу простой пример, я хочу использовать вектор класса person, поэтому я должен сказать вектору шаблона: эй, храни мне несколько person, но я также должен сказать вектор, как выделить этот класс. (1) Каким будет правильный синтаксис для этого примера?
некоторый код для начала:
примечание: в конструкторе person c(2) следует использовать date*?
class date
{
public:
int m_nMonth;
int m_nDay;
int m_nYear;
int getMonth(return m_nMonth;)
int getDay(return m_nDay;)
int getYear(return m_nYear;)
void setDate(int month, int day, int year)
{
m_nMonth=month;
m_nDay=day;
m_nYear=year;
}
date()
{
setDate(0,0,0);
}
date(int month, int day, int year)
{
setDate(month,day,year);
}
void printDate()
{
printf("%d/%d/%d", m_nMonth, m_nDay, m_nYear);
}
}
class person
{
public:
int m_nID;
char m_sName[128];
char m_sSurname[128];
date m_cBirthDay;
void setName(const char* name)
{
strncpy(m_sName, name, 127);
m_sName[127]= '\0';
}
void setSurname(const char* surname)
{
strncpy(m_sSurname, surname, 127);
m_sName[127]= '\0';
}
void setBirthDay(date* bday);
{
m_cBirthDay.date(bday.getMonth(), bday.getDay(), bday.getYear)
}
person(int id, const char* name, const char* surname, date bday)/*should it be date* bday? why?*/
{
m_nID=id;
setName(name);
setSurname(surname);
setBirthDay(bday);
}
}
я полагаю, вам нужно объявить функцию внутри класса person, называемую распределителем, то есть то, что передается в качестве второго аргумента при вызове, (3) как будет определена эта функция распределения?:
vector <person*, /*some allocator call*/> ImAVector;
затем (4) как я могу нажать что-то в векторе, (5) будет ли это работать?:
person* someperson;
someperson.person(/*arguments*/);
ImAVector.push_back(someperson);
(6) как я могу получить указатель на конкретный экземпляр? (7) могу ли я использовать итератор, чтобы сделать что-то подобное?:
//(6)
person* = ImAVector[someIterator];
//and then (7)
ImAVector[someIterator].setName(someConstCharPointer);
string* something = person.getName();
кроме того, (8) имеет ли распределитель какое-либо отношение к конструктору? (9) его обычная процедура для заполнения полей вашего класса сразу после выделения экземпляра класса? (10) может ли распределитель вызвать конструктор?
И последние вопросы: (11) что такое поле ссылки, поле указателя и их константные аналоги?
Я знаю, что писать нужно много, но последние два дня я провел безуспешно в поисках примеров, поэтому было бы неплохо, если бы кто-нибудь пролил свет на эту редко обсуждаемую тему, я пронумеровал все вопросы для легкого ответа.
Я ценю любые ответы :)
std::vector<person*> persons; persons.push_back(new person(...));
Будет работать и без указателей:std::vector<person> persons; persons.push_back(person(...));
- person Some programmer dude   schedule 31.10.2013std::vector<std::unique_ptr<person>>
. Если возможно, используйте компилятор C++11. - person Basile Starynkevitch   schedule 31.10.2013