c++ vecteur dernier élément champ

J'ai un vecteur , vec de structures. Une telle structure a des éléments de int a, int b, int c. Je voudrais attribuer à certains int var l'élément c, de la dernière structure dans un vecteur. Pouvez-vous me fournir cette solution simple? Je vais faire la queue comme ceci:

var = vec.end().c;
30
demandé sur berndh 2013-01-11 13:38:48

7 réponses

La réponse immédiate à votre question sur l'accès au dernier élément d'un vecteur peut être accomplie en utilisant le membre back(). Tels que:

int var = vec.back().c;

Remarque: s'il est possible que votre vecteur soit vide, un tel appel à back() provoque un comportement indéfini. Dans de tels cas, vous pouvez vérifier l'état vide de votre vecteur avant d'utiliser back() en utilisant le Membre empty():

if (!vec.empty())
   var = vec.back().c;

Probablement l'une de ces deux méthodes sera applicable pour vos besoins.

64
répondu WhozCraig 2013-01-11 10:28:24

vec.end() est un itérateur qui fait référence à l'emplacement après la fin dans le vecteur. En tant que tel, vous ne pouvez pas le déférer et accéder aux valeurs des membres. vec.end() l'itérateur est toujours valide, même dans un vecteur vide (auquel cas vec.end() == vec.begin())

Si vous voulez accéder au dernier élément de votre vecteur, utilisez vec.back(), qui renvoie une référence (et non un itérateur). Notez cependant que si le vecteur est vide, cela conduira à un comportement indéfini; très probablement un plantage.

8
répondu CygnusX1 2013-01-11 09:44:46

Utiliser back():

var = vec.back().c;
4
répondu Veger 2013-09-12 19:48:48

var = vec.back().c; c'est ce que tu veux.

end() renvoie l'itérateur (pas un élément) après la fin du vecteur. back() renvoie une référence au dernier élément. Il a aussi une contrepartie front().

2
répondu Chowlett 2013-01-11 09:40:56

Essayez ceci: var = vec.back().c;

Vous pouvez également modifier votre code comme:

var = vec.rbegin()->c;

Dans les deux versions, assurez-vous d'abord que le vecteur n'est pas vide!

2
répondu Ivaylo Strandjev 2013-01-11 09:41:25

Vous pouvez simplement utiliser back comme elle renvoie une référence au dernier élément.
var = vec.back().c

1
répondu mkaes 2013-01-11 09:41:47

Vous pouvez utiliser la fonction std:vector<T>:back(), par exemple vec.back().c. Voir http://www.cplusplus.com/reference/vector/vector/back/

0
répondu Lars 2013-01-11 09:42:45