649 votes

Comment faire pour effacer l'élément de std::vector<> par index?

J'ai un std::vector, et je veux supprimer le n-ième élément. Comment dois-je faire?

std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

vec.erase(???);

S'il vous plaît aider!

836voto

Rüdiger Stevens Points 5381

Vous pourriez faire

std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

vec.erase(vec.begin() + 1);

ou

vec.erase(vec.begin() + 1, vec.begin() + 3);

pour supprimer plus d'un élément à la fois.

343voto

CodeBuddy Points 1260

La méthode d'effacement sur les std::vector est surchargé, donc il y a probablement plus de clarté, composez le:

vec.erase(vec.begin() + index);

lorsque vous ne voulez effacer un seul élément.

63voto

Max Points 297
template <typename T>
void remove(std::vector<T>& vec, size_t pos)
{
    std::vector<T>::iterator it = vec.begin();
    std::advance(it, pos);
    vec.erase(it);
}

14voto

Roddy Points 32503

J'ai toujours trouvé l' begin() + n chose un peu bizarre.

Je préfère ce qui a l'avantage d'être plus court à taper.

  vec.erase(&vec[index]);

Ou, de même, si vous avez besoin de la vérification des limites sur les effacer

  vec.erase(&vec.at(index));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X