向量与字符串

新手上路,请多包涵

C++ std::vector 和 std::basic_string 之间的根本区别是什么?

原文由 Yttrill 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 309
1 个回答
  • basic_string 不调用其元素的构造函数和析构函数。矢量确实如此。

  • 交换 basic_string 会使迭代器无效(启用小字符串优化),交换向量不会。

  • 在 C++03 中可能不会连续分配 basic_string 内存。向量总是连续的。在 C++0x [string.require] 中消除了这种差异:

basic_string 对象中的类字符对象应连续存储

  • basic_string 具有字符串操作的接口。矢量没有。

  • basic_string 可以使用写时复制策略(在 C++11 之前)。矢量不能。

非信徒的相关引述:

[基本字符串]:

类模板 basic_string 符合序列容器 (23.2.3)、可逆容器 (23.2) 和分配器感知容器(表 99)的要求,除了 basic_string 不使用 allocatortraits 构造或销毁其元素::construct 和 allocator- traits::destroy 以及用于 basic_string 的 swap() 使迭代器无效。 basic_string 支持的迭代器是随机访问迭代器 (24.2.7)。

原文由 Yakov Galka 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题