为什么string不是vector的(子类)?



C语言字符串是字符数组。

vector是c++中的新数组。

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

大多数vector和string的方法似乎也有重复。有什么理由让字符串在c++中成为一个不同的东西吗?

这就是历史。对于T==char,字符串和向量是并行开发的,很少考虑如何将它们视为一个相同的东西。

这也是为什么标准容器是好的和通用的,而std::basic_string是一个成员函数接一个成员函数的整体。

由于边缘情况优化机会使得很难或不可能以任何标准方式将std::basic_string<T, Alloc>转化为std::vector<T, Alloc>。以小字符串优化为例。虽然,现在GCC的写时复制机制已经被正式废除了,但我们离目标又近了一点。

合法地解引用std::string::end()(并获得'')的能力仍然是有问题的。.c_str()的一堆相当严格的迭代器失效规则基本上阻止了我们从一开始就使用std::vector<char>

tl;dr:当您创建一个camel

Vector vs string中的各种答案显示了vectorstring之间的接口的一些差异,并且由于标准中的典型模式是使用静态多态性而不是动态多态性,因此它们被创建为两个不同的类。

由于字符串确实具有与向量不同的特征,因此您似乎不希望使用公共继承,但我认为标准中没有任何内容会禁止受保护或私有继承,或组合来提供底层空间管理。

另外,我怀疑string可能已经开发得更早,并且与vector正交,这可能解释了为什么如果与vector并行开发,则更有可能使成员方法成为自由算法。

是的,因为vector是一个可以包含T的容器,而std::string是char*的包装,不能包含int或其他数据类型。如果不是这样的话就没有意义了

最新更新