std::string是标准C++库中的容器类吗?它是否只限于存储char元素?
实际上,它是std::basic_string<char>
的一个typedef。 std::basic_string
是一个专门设计用于字符串操作的容器类。此容器也可以用于宽字符 (wchar_t
) 的情况; 对于此情况,它的typedef将是wstring
。
std::basic_string<>
是一个类,非常像一个序列容器。请注意,std::basic_string
可以包含任何POD类型,而不仅仅是char
类型(这是std::string
的类型)或wchar_t
(std::wstring
的类型)。
我认为basic_string
支持所有序列容器的操作。但是,请注意,按照定义,容器类型可以保存任何可赋值和可复制构造的类型,而不仅仅是POD类型。因此,basic_string
非常像一个容器,但严格来说它不是一个容器。
换句话说,有些类型可以用于容器,但不能用于basic_string
。但对于那些可以与basic_string
一起使用的类型,std::basic_string
提供了序列容器的完整接口(我想是这样),以及其他功能。
将basic_string<char, std::char_traits<char>, std::allocator<char> >
定义为 std::string
,主要用于表示char类型的字符串。
然而,我认为 basic_string 本身并不一定只限于字符类型(尽管从名称上来看,它可能旨在用于字符串数据)。
#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);
}
std::string是一个基本字符串。 它不一定是char类型的,但必须遵循char traits规则。 http://www.cplusplus.com/reference/string/char_traits/
std::string
是一个std::basic_string<char, std::char_traits<char>, std::allocator<char>>
,它严格限制为char
。 - Lightness Races in Orbit
basic_string<>
不能容纳非POD类型,而像vector<>
这样的容器可以容纳。但对于POD类型(如普通结构体),您可以拥有std::basic_string<mystruct_t>
。老实说,我只是按照标准所说的去做 - 经过一些实验后,一些编译器(GCC 3.4.5和Comeau)将至少接受简单的非POD类型作为用于basic_string<>
的类型,而一些编译器则不会接受简单的聚合POD类型(Digital Mars,VC6)。 VC9的行为似乎符合标准。 - Michael Burr