Je me demandais s’il y avait une abréviation ou une manière plus élégante d’obtenir le dernier caractère d’une chaîne comme dans:
char lastChar = mySsortingng.at( mySsortingng.length() - 1 );
Quelque chose comme mySsortingng.back()
ne semble pas exister. Y a-t-il un équivalent?
En C ++ 11, vous pouvez utiliser la fonction membre back
:
char ch = myStr.back();
En C ++ 03, std::ssortingng::back
n’est pas disponible en raison d’un oubli, mais vous pouvez contourner ce reverse_iterator
le reverse_iterator
vous recevez de rbegin
:
char ch = *myStr.rbegin();
J’espère que cela t’aides!
Vous voulez probablement vérifier d’abord la longueur de la chaîne et faire quelque chose comme ceci:
if (!myStr.empty()) { char lastChar = *myStr.rbegin(); }
Vous pouvez écrire un modèle de fonction qui délègue à la fonction membre des conteneurs ordinaires et une fonction normale qui implémente la fonctionnalité manquante pour les chaînes:
template typename C::reference back(C& container) { return container.back(); } template typename C::const_reference back(const C& container) { return container.back(); } char& back(std::ssortingng& str) { return *(str.end() - 1); } char back(const std::ssortingng& str) { return *(str.end() - 1); }
Ensuite, vous pouvez simplement dire back(foo)
sans vous soucier de savoir si foo
est une chaîne ou un vecteur.
*(mySsortingng.end() - 1)
peut-être? Ce n’est pas exactement élégant non plus.
Un python-esque mySsortingng.at(-1)
demanderait trop une classe déjà gonflée.