为什么字符串不是(子类)向量?

时间:2015-07-14 15:43:21

标签: c++

C字符串是char数组。

Vectors是C ++中的新数组。

为什么没有字符串向量(字符串)?

矢量和字符串的大多数方法似乎都是重复的。是否有理由在C ++中使字符串成为另一种东西?

2 个答案:

答案 0 :(得分:2)

这几乎只是历史性的。字符串和向量是同时开发的,很少考虑如何将它们视为同一个T==char

这也是标准容器很好且通用的原因,而std::basic_string是成员函数之后的成员函数的整体结构。

边缘案例优化机会,因此很难或无法以任何标准方式将std::basic_string<T, Alloc>转换为std::vector<T, Alloc>。例如,采用小字符串优化。虽然现在GCC的写时复制机制正式死机,但我们距离更近了。

但是,合法取消引用std::string::end()(并为您的麻烦获取'\0')的能力仍然存在问题。 .c_str()的一系列相当严格的迭代器失效规则基本上阻止我们从一开始就使用std::vector<char>

tl; dr:创建骆驼时会发生这种情况

答案 1 :(得分:0)

是的,因为vector是一个可以包含T的容器,std :: string是char *的包装器,不能包含int或其他数据类型。任何其他方式都没有任何意义。