std :: string一个容器

时间:2009-11-24 13:31:54

标签: c++ containers

std :: string是标准c ++库中的容器类,仅限于保存char元素吗?

4 个答案:

答案 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/