zoukankan      html  css  js  c++  java
  • C++学习笔记(六):复杂数据类型(string、容器和STL)

    STL

    即Standard Template Library(标准模板库),由于C++自带的数据类型过于简单,并不能满足我们的使用需要,而STL作为C++标准的内置库为我们编写好了多种高效的数据结构和算法,引入这些库后直
    接使用即可。

    容器简介:
    标准STL序列容器:vector、string、deque和list。
    标准STL关联容器:set、multiset、map和multimap。
    非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一“重型”string。
    非标准的关联容器hash_set、hase_multiset、hash_map和hash_multimap。
    几种标准的非STL容器,包括数组、bitset、valarray、stack、queue和priority_queue。

    string
    扩展了C++中操作字符串的功能;

    1 #include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件
    2 
    3 using  std::string;
    4 using  std::wstring;
    5 
    6 using namespace std;

    string和wstring的用法是一样的,它们两分别对应着char和wchar_t。
    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。

    vector(向量,相当于一个数组):
    在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。
    优点:

    1. 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组 进行动态操作。通常体现在push_back() pop_back()
    2. 随机访问方便,即支持[ ]操作符和vector.at()
    3. 节省空间。

    缺点:

    1. 在内部进行插入删除操作效率低。
    2. 只能在vector的最后进行push和pop,不能在vector的头进行push和pop。
    3. 当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配、拷贝与释放

    如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector


    list(双向链表):
    每一个结点都包括一个信息快Info、一个前驱指针Pre、一个后驱指针Post。可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。
    优点:

    1. 不使用连续内存完成动态操作。
    2. 在内部方便的进行插入和删除操作
    3. 可在两端进行push、pop

    缺点:

    1. 不能进行内部的随机访问,即不支持[ ]操作符和vector.at()
    2. 相对于verctor占用内存多

    如果你需要大量的插入和删除,而不关心随即存取,则应使用list


    deque(双端队列 double-end queue):
    deque是在功能上合并了vector和list。
    优点:

    1. 随机访问方便,即支持[ ]操作符和vector.at()
    2. 在内部方便的进行插入和删除操作
    3. 可在两端进行push、pop

    缺点:

    1. 占用内存多

    如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque

    set
    存储已排序的无重复的元素。


    multiset
    元素可以重复的set。


    map
    存储key-value对,按key排序,并且key值无重复。


    multimap
    key值可以重复的map。

  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/hammerc/p/4015709.html
Copyright © 2011-2022 走看看