Je suis très nouveau en C++.

J'ai étudié de nombreux articles sur le C++ et la solution pour déplacer le dernier élément du vecteur vers un autre, mais je ne comprends toujours pas comment faire cela.

J'ai deux vecteurs:

std::vector<Person *> persons;
std::vector<Person *> availablePersons;

Et fonction:

MoveLast() {
    std::move(persons.end() - 1, persons.end(), std::back_inserter(availablePersons));
}

Mais cela semble très long et ne fonctionne pas comme prévu.

J'ai donc besoin d'une méthode simple et efficace sans perdre Person objets en mémoire

-1
featureoffuture 17 févr. 2020 à 00:35

1 réponse

Meilleure réponse

Les vecteurs ne contiennent pas d'objets Person, ils contiennent juste des pointeurs. Déplacer ces pointeurs signifie vraiment effectuer une copie. Vous faites donc deux choses, copier un pointeur vers un conteneur et supprimer un pointeur d'un autre conteneur. Une implémentation simple comme celle-ci devrait suffire :

MoveLast() {
    if (!persons.empty()) { // ensure source vector isn't empty
        availablePersons.push_back(persons.back()); // copy last element to destination
        persons.pop_back(); // remove last element from source
    }
}

Si vos vecteurs contenaient un type activé pour le déplacement, vous pouvez, par optimisation, remplacer la deuxième ligne par ceci :

availablePersons.push_back(std::move(persons.back())); // move last element to destination
1
Blastfurnace 16 févr. 2020 à 22:34