矢量vs字符串 [英] Vector vs string

查看:65
本文介绍了矢量vs字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

What is the fundamental difference, if any, between a C++ std::vector and std::basic_string?

推荐答案


  • basic_string不会调用其元素的构造函数和析构函数。

    • basic_string doesn't call constructors and destructors of its elements. vector does.

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

      swapping basic_string invalidates iterators (enabling small string optimization), swapping vectors doesn't.

      basic_string内存不能在C ++ 03中连续分配。矢量总是连续的。在C ++ 0x [string.require]中删除此差异:

      basic_string memory may not be allocated continuously in C++03. vector is always continuous. This difference is removed in C++0x [string.require]:


      basic_string对象中的类char对象应连续存储

      The char-like objects in a basic_string object shall be stored contiguously


    • basic_string有字符串操作接口。向量不能。

    • basic_string has interface for string operations. vector doesn't.

      basic_string可以使用写入策略上的副本(在C ++ 11之前)。向量不能。

      basic_string may use copy on write strategy (in pre C++11). vector can't.

      非信徒的相关引文:

      [basic.string]:

      [basic.string]:


      类模板basic_string符合序列容器(23.2.3)的要求,对于
      可逆容器(23.2)和一个分配器感知容器(表99),除了basic_string
      不使用allocator_traits :: construct和allocator_traits :: construct和allocator_-
      构造或销毁它的元素traits :: destroy和那个交换()为basic_string无效迭代器。由basic_string支持
      的迭代器是随机访问迭代器(24.2.7)。

      The class template basic_string conforms to the requirements for a Sequence Container (23.2.3), for a Reversible Container (23.2), and for an Allocator-aware container (Table 99), except that basic_string does not construct or destroy its elements using allocator_traits::construct and allocator_- traits::destroy and that swap() for basic_string invalidates iterators. The iterators supported by basic_string are random access iterators (24.2.7).

      这篇关于矢量vs字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆