est std :: string une classe de conteneur bibliothèque C++ standard, limitée à ne détenir que des éléments ombles?std :: string un conteneur
Répondre
Il est un typedef de std::basic_string<char>
, en fait. std::basic_string
est une classe de conteneur spécialement conçue pour les opérations de chaînes. Ce conteneur peut également être utilisé pour les caractères larges (wchar_t
); pour ce cas, son typedef serait wstring
.
std :: string est un basic_string. Ce n'est pas nécessairement un char, mais il doit suivre les ombles traits http://www.cplusplus.com/reference/string/char_traits/
std :: string comme typedef pour basic_string<char, std::char_traits<char>, std::allocator<char> >
est à peu près limitée au type char.
Cependant, je ne pense pas que se basic_string est nécessairement limitée aux seuls types de caractères (bien que, comme son nom l'indique, il pourrait être destiné à être utilisé pour les données de chaîne).
#include <string>
#include <cassert>
int main()
{
std::basic_string<int> numbers_1, numbers_2;
numbers_1 += 1;
numbers_2 += 2;
std::basic_string<int> numbers_3 = numbers_1 + numbers_2 + 3;
unsigned pos = numbers_3.find(10);
assert(pos == std::basic_string<int>::npos);
}
A std::basic_string<>
est une classe qui est très semblable à un conteneur de séquence. Notez que std::basic_string
peut contenir n'importe quel type de POD, pas seulement des éléments de type char
(qui est ce qu'un std::string
est) ou wchar_t
(std::wstring
).
Je pense qu'un basic_string
supporte toutes les opérations d'un conteneur de séquence. Cependant, notez que, par définition, un type de conteneur peut contenir tous les types assignables et reproductibles par copie - pas seulement les types POD. Donc, un basic_string
ressemble beaucoup à un conteneur, mais à proprement parler, ce n'est pas un conteneur.
En d'autres termes il y a des types qui peuvent être utilisés avec un récipient qui ne peut pas être utilisé avec un basic_string
. Mais pour les types qui peuvent être utilisés avec un basic_string
, le std::basic_string
fournit l'interface complète d'un conteneur de séquence (je pense) plus des fonctionnalités supplémentaires.
Michael, s'il vous plaît corriger si je me trompe. Votre réponse semble contradictoire avec ces affirmations. - Notez que std :: basic_string peut contenir n'importe quel type de POD, pas seulement des éléments de type char. - il existe des types qui peuvent être utilisés avec un conteneur qui ne peut pas être utilisé avec une chaîne_basique. La question est maintenant de savoir si std :: basic_string peut contenir n'importe quel type, primitif ou non. Si oui, seulement alors std :: basic_string se comporte comme un vrai conteneur STL. – Ankur
@Ankur - Je ne suis pas exactement sûr de ce que vous demandez. 'basic_string <>' ne peut pas contenir de types non-POD qu'un conteneur comme 'vector <>' pourrait contenir. Mais pour les types POD (comme une struct simple), vous pouvez avoir un 'std :: basic_string
@Michael. Ok, je pense que je l'ai maintenant. BTW, que signifie le type POD. Cela signifie-t-il des types de données primitifs (tels que int, char) ou plus? – Ankur
- 1. Pourquoi std :: string :: max_size() == std :: string :: allocator :: max_size()
- 2. erreur C2440: '=': impossible de convertir 'std :: string []' en 'std :: string []'
- 3. opérateur std :: string() const?
- 4. std :: string x (x);
- 5. en utilisant std :: find_if avec std :: string
- 6. std :: trier sur std :: vector <std::string>
- 7. Ouvrir un fichier avec std :: string
- 8. renvoie une std :: string avec un vecteur
- 9. Construire std :: string comme un tableau
- 10. Convertir std :: string en QString
- 11. Problème avec std :: string :: find()
- 12. Cython C++ et std :: string
- 13. std :: string :: remplace l'implémentation standard?
- 14. convertir std :: string en basic_ostream?
- 15. opérateur bool() converti en std :: string et en conflit avec l'opérateur std :: string()
- 16. C++ .NET convertir System :: String en std :: string
- 17. erreur bad_alloc lors de l'utilisation std :: string
- 18. utf-8 codant une chaîne std :: string?
- 19. Génération d'un ID unique de std :: string
- 20. Comment convertir std :: string en NSString?
- 21. une Initialisation std :: string d'un personnage
- 22. initialisation std :: string de char * sans copie
- 23. Comment std :: string surcharge l'opérateur d'affectation?
- 24. const unsigned char * à std :: string
- 25. Supprimer les NULL de std :: string
- 26. Comment INSÉRER binaire std :: string en BLOB
- 27. std :: string :: assign() provoque la segfault
- 28. typedef a std :: string - Meilleure pratique
- 29. std :: string effacer le dernier caractère échoue?
- 30. Convertir std :: string en MSVC spécifique __int64
Non, 'std :: string' est un' std :: basic_string, std :: allocateur > ', qui est strictement restreint' char'. –