Dans mon code, j'ai un vecteur d'objets étudiants.En C++, comment pousser un objet vers un vecteur tout en maintenant un pointeur sur l'objet?
vector<Student> m_students;
Je veux:
- Vérifiez si le vecteur contient tout étudiant d'un certain nom.
- Si un tel étudiant n'existe pas, ajoutez-en un nouveau.
- Ajoutez des données à l'étudiant de ce nom.
Consultez le code suivant:
// Check to see if the Student already exists.
Student* targetStudent = NULL;
for each (Student student in m_students)
{
if (student.Name() == strName)
{
targetStudent = &student;
break;
}
}
// If the Student didn't exist, add it.
if (targetStudent == NULL)
{
targetStudent = new Student(strName);
m_students.push_back(*targetStudent);
}
// Add the course info to the Student.
targetStudent->Add(strQuarter, strCourse, strCredits, strGrade);
Quand je fais l'appel à m_students.push_back(*targetStudent);
il semble que le vecteur « m_students » se termine par une copie de l'objet de l'étudiant que les points « targetStudent » à à ce temps.
La tentative ultérieure d'ajout à targetStudent ne modifie pas l'objet contenu dans le vecteur. Comment puis-je, en commençant par un pointeur vers un objet, ajouter cet objet à un vecteur et accéder ensuite à l'objet qui se trouve dans le vecteur?
Je recommanderais toujours d'utiliser :: std au lieu de std en faisant référence à l'espace de nom standard. Si quelqu'un crée son propre espace de nom appelé 'std' (pas de niveau supérieur bien sûr, ce ne serait pas légal) alors vous pourriez vous retrouver avec des références ambiguës ou étonnamment résolues à std dans certains cas. – Omnifarious
@Omnifarious Certains peuvent également faire #define std foo'. Vous ne pouvez pas vous préparer à toutes les idioties. –
@quant_dev: Ce n'est pas vraiment parce que quelqu'un peut créer un espace de noms appelé 'std' qui se trouve dans un autre espace de noms. C'est ainsi que vous avez l'habitude de toujours faire référence aux espaces de noms par le nom que vous voulez dire, pas le nom le plus pratique qui semble fonctionner aujourd'hui. – Omnifarious