std :: string是标准c ++库中的容器类,仅限于保存char元素吗?
答案 0 :(得分:13)
实际上它是std::basic_string<char>
的typedef。 std::basic_string
是专为字符串操作设计的容器类。此容器也可用于宽字符(wchar_t
);对于那种情况,它的typedef将是wstring
。
答案 1 :(得分:5)
std::basic_string<>
是一个非常类似于序列容器的类。请注意,std::basic_string
可以包含任何 POD类型,而不仅仅是char
类型的元素(std::string
是什么)或wchar_t
({ {1}})。
我相信std::wstring
支持序列容器的所有操作。但是,请注意,根据定义,容器类型可以包含任何可分配和可复制构造的类型 - 而不仅仅是POD类型。所以basic_string
非常像一个容器,但严格来说它不是容器。
换句话说,有些类型可以与不能与basic_string
一起使用的容器一起使用。但是对于可以与basic_string
一起使用的那些类型,basic_string
提供了序列容器的完整接口(我认为)以及其他功能。
答案 2 :(得分:4)
作为basic_string<char, std::char_traits<char>, std::allocator<char> >
的typedef的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);
}
答案 3 :(得分:3)
std :: string是一个basic_string。 它不一定是char,但它必须遵循char特征 http://www.cplusplus.com/reference/string/char_traits/