C++ C++;std::string是容器吗?

C++ C++;std::string是容器吗?,c++,containers,stdstring,C++,Containers,Stdstring,对于你们中的一些人来说,这可能是一个简单的问题。但是我想知道std::string是否是一个容器。容器是指容器,例如std::vector,std::list和std::deque 因为std::basic_string接受整型字符以外的其他类型,但也通过使用字符数组进行优化。我真的不清楚它属于哪一类 这将汇编: #include <string> #include <iostream> int main() { std::basic_string<int

对于你们中的一些人来说,这可能是一个简单的问题。但是我想知道
std::string
是否是一个容器。容器是指容器,例如
std::vector
std::list
std::deque

因为
std::basic_string
接受整型字符以外的其他类型,但也通过使用字符数组进行优化。我真的不清楚它属于哪一类

这将汇编:

#include <string>
#include <iostream>

int main() {
    std::basic_string<int> int_str;
    int_str.push_back(14);
    return 0;
}
#包括
#包括
int main(){
std::基本字符串int\u str;
内推(14);
返回0;
}
但通过增加这一行:

std::cout << int_str << std::endl;
std::cout是的,该模板满足。但是,我认为它对包含的类型有更高的要求。只是想弄清楚到底是什么


(这不是比亚恩的概念。只是标为“
23.2.1一般容器要求”
”的标准的一部分)

可以肯定地说,它不是一个容器,至少不是你通常认为的std容器

最简单的例子是,你不能在里面放任何你想要的东西

但是它确实有一些容器的分类,比如你可以把一些基本类型放进去,即使它们不是char,也许最令人惊奇的是你可以像一个普通的容器一样得到一个迭代器

那它是集装箱吗?我会说是的,但是!根据标准(20032011),std::basic_string是一个仅用于POD类型的容器。 即基本类型或无构造函数、析构函数或虚函数的普通结构/类。 但是gnu stdlib允许将非POD类型与std::basic_字符串一起使用。是使用基本字符串和非POD类型的示例

若你们想让你们的例子起作用,你们应该定义操作符

std::ostream& operator<<(::std::ostream& out, std::basic_string<int> &dat) 
{ 
    out << dat[0];
    return out; 
}

严格地说,它不是标准容器库的一部分。但是把它放在哪个类别取决于你想用它做什么:在很多方面,字符串看起来确实很像一个容器,它不够通用,不能成为一个合适的容器。不能从
struct X
float
生成字符串。该标准具有
容器
概念。这大概是我们可以用来回答这个问题的最佳定义了。@Matstpeterson为什么不能用
float
来定义一个字符串?@curiousguy我怀疑它是否有效,因为用于字符串的
char\u traits
不是为
float
类型定义的。[这也会很奇怪,你怎么处理“介于”A和B之间的角色?]你不能在你通常认为是“容器”的某些东西中放入任何你想要的东西。例如,如果不是,您可以将某些内容放入
std::vector
,但无法将其放入
std::set