web-dev-qa-db-fra.com

champ du dernier élément du vecteur c ++

J'ai un vecteur vec de structures. Une telle structure a des éléments int a, int b, int c. Je voudrais affecter à certains int var l'élément c, de la dernière structure d'un vecteur. Pouvez-vous me fournir cette solution simple? Je fais le tour en ligne comme ceci:

var = vec.end().c;
39
berndh

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

int var = vec.back().c;

Remarque: S'il existe une possibilité 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 prior pour utiliser back() en utilisant le membre empty():

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

Une de ces deux méthodes sera probablement applicable à vos besoins.

79
WhozCraig

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 souhaitez 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 crash.

9
CygnusX1

Utilisez back() :

var = vec.back().c;
4
Veger

var = vec.back().c; est ce que vous voulez.

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 également une contrepartie front().

2
Chowlett

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
Ivaylo Strandjev

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

1
mkaes

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

0
Lars