• C++ 容器


    转自:http://blog.csdn.net/cytbox/archive/2005/01/18/258591.aspx

    “从程序员的角度来看,STL是有一些可适应不同需求的群集类别(collection classes),和一些能够在这些数据群集上运行的算法构成。”

    “当然,如此灵活性并非免费午餐,代价总是有的。首要的一点是,STL并不好懂。”(这是一场持久仗啊)

    “若干精心勾画的组件共同合作,构筑起STL的基础。这些组件中最关键的是容器、迭代器和算法。”

    “容器 Container,用来管理某类对象的集合。”

    “迭代器Iterators,用来在一个对象群集的元素上进心遍历动作。”

    “算法 Algorithms,用来处理群集内的元素。”

    “STL的基本观念就是将数据和操作分离。数据由容器类别加以管理,操作则由可定制的算法定义。迭代器在两者之间充当粘合剂,使任何算法都可以和任何容器交互运作。”

    在标准库中,容器分为:序列式容器、关联式容器。

    序列式容器:可序群集,其中每个元素均有固定位置—取决于插入时机和地点,和元素无关。如果以追加的方式对一个群集置入六个元素,它们的排列次序和置入次序一致。有几个已定义好的容器:vector、deque、list。

    关联式容器:以序容器。元素位置取决于特定的排序准则。如果将六个元素的置入这个群集中,它们的位置取决于元素值,和插入次序无关。也就是说,关联式容器可以自动排序。STL提供了四个关联式容器:set、multiset、map、multimap。

    //stl/vector1.cpp

    #include<isotream>

    #include<vector>

    using namespace std;

    int main()

    {

       Vector<int>coll;

       //append elements with values 1 to 6

       for(int i=1;i<=6;++i)

              coll.push_back(i);

       //frint all elements followed by a space

       for(int i=0;i<coll.size();++i)

              cout<<coll[i]<<’’;

       cout<<endl;

    }

    这是一段利用vector的函数,将6个元素插入到vector中的代码。一边输入这些代码,一边感叹STL的强大。想想当初学数据结构时那些算法,当然STL的功能绝不是这么简单的。代码重用性得到了很大的提高。

    需要注意的是,STL只提供时间效能良好的成员函数,时间效能良好通常意味具有常数复杂度或者对数复杂度。

    简单说说关联式容器。

    Sets:set内的元素依据其值自动排序,每个元素只允许出现一次,不允许重复。

    Multisets:和set相同,只不过它允许重复元素。

    Maps:它的元素都是“实值/键值”所形成的一对数。每个元素有一个键,是排序准则的基础。每一个键只能出现一次,不允许重复。

    Multismaps:和map相同,但允许重复元素。

    容器配接器:

    除了以上数个根本的容器类别,为满足特殊需求,C++标准程序库还提供了一些特别的(并且预先定义好的)容器配接器,根据基本容器类别实作而成。包括:Stacks(LIFO)、Queues(FIFO)、Priority Queue。

    一个容器的简单示例:

    #include <iostream>
    #include
    <vector>

    using namespace std;
    using std::vector;

    int main()
    {
    int a[] = {1,3,5,7,9};
    vector
    <int> buff(a,a+5);
    buff.push_back(
    11);

    unsigned
    int i;
    for(i = 0;i < buff.size();++i)
    {
    cout
    <<buff[i]<<endl;
    }

    return 0;
    }

  • 相关阅读:
    ubuntu 安装QT 5.0出现错误:Failed to load platform plugin "xcb".
    Ubuntu手动编译GCC
    C++面试题集锦(一)
    C++排序系列(一) 插入排序之折半插入排序
    关于内存对齐的面试题
    C++中的static_cast, dynamic_cast和reinterpret_cast
    C++排序系列(二) 交换排序之简单排序
    Cannot open include file: 'iphlpapi.h': No such file or directory(最终解决方法)
    C++排序系列(一) 插入排序之直接插入排序
    ubuntu aptget update时出现W: GPG 错误
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2047310.html
Copyright © 2020-2023  润新知