C++ std::字符串一个容器

C++ std::字符串一个容器,c++,containers,C++,Containers,是标准C++库中容器类的字符串:限制只保存字符元素。 它是STD::Basic字符串的Type。code>std::basic_string是专门为字符串操作设计的容器类。此容器也可用于宽字符(wchar\t);在这种情况下,其typedef将是wstringstd::string是一个基本字符串。 它不一定是字符,但必须遵循字符特性 std::string作为basic_string的typedef几乎仅限于char类型 然而,我不认为basic_string本身必然只限于字符类型(尽管,顾名

是标准C++库中容器类的字符串:限制只保存字符元素。

它是STD::Basic字符串的Type。code>std::basic_string是专门为字符串操作设计的容器类。此容器也可用于宽字符(
wchar\t
);在这种情况下,其typedef将是
wstring

std::string是一个基本字符串。 它不一定是字符,但必须遵循字符特性
std::string作为
basic_string
的typedef几乎仅限于char类型

然而,我不认为basic_string本身必然只限于字符类型(尽管,顾名思义,它可能用于字符串数据)

#包括
#包括
int main()
{
std::基本字符串编号1,编号2;
数字_1+=1;
数量_2+=2;
std::基本字符串数字\u3=数字\u1+数字\u2+3;
无符号pos=数字\u 3.查找(10);
断言(pos==std::basic_string::npos);
}
A
std::basic_string
是一个非常类似于序列容器的类。请注意,
std::basic_string
可以包含任何POD类型,而不仅仅是
char
类型的元素(这就是
std::string
wchar\u t

我相信
basic_string
支持序列容器的所有操作。但是,请注意,根据定义,容器类型可以包含任何可分配和可复制的构造类型,而不仅仅是POD类型。因此,
basic_string
非常像一个容器,但严格来说它不是一个容器


换句话说,有些类型可以与容器一起使用,而不能与
basic\u字符串一起使用。但是对于那些可以与
basic\u字符串
一起使用的类型,
std::basic\u字符串
提供了序列容器的完整接口(我认为)以及其他功能。

Michael,如果我错了,请更正。你的回答似乎与这些陈述相矛盾请注意,std::basic_字符串可以包含任何POD类型,而不仅仅是char类型的元素。-有些类型可以与不能与基本字符串一起使用的容器一起使用。所以现在的问题是std::basic_字符串是否可以保存任何类型,原语或其他类型。如果是,那么std::basic_字符串的行为就像一个真正的STL容器。@Ankur-我不太确定你在问什么
basic_string
无法容纳像
vector
这样的容器可以容纳的非POD类型。但是对于POD类型(比如普通的旧结构),您可以使用
std::basic\u字符串。老实说,我只是按照标准所说的去做——看起来经过一点实验,一些编译器(GCC 3.4.5和Comeau)至少会接受简单的非POD类型作为
basic_string
的类型,而一些编译器不会接受简单的聚合POD类型(Digital Mars,VC6)。“VC9的行为似乎符合标准的要求。@Michael。好吧,我想我现在明白了。顺便问一下,豆荚类型是什么意思。它是指原始数据类型(如int、char)还是更多?@Anku:plainolddata-一个表示简单类型的C++98概念。例如,POD类型不能具有虚拟函数,并且可以安全地memcpy'd。不,
std::string
是一个
std::basic_string
,它被绝对限制为
char
#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);
}