STL总结

STL是C++标准程序库的核心,深刻影响了标准程序库的整体结构

STL由一些可适应不同需求的集合类(collection class),以及在这些数据集合上操作的算法(algorithm)构成

STL内的所有组件都由模板(template)构成,其元素可以是任意类型

STL是所有C++编译器和所有操作系统平台都支持的一种库

STL组件

容器(Container)- 管理某类对象的集合

迭代器(Iterator)- 在对象集合上进行遍历

算法(Algorithm)- 处理集合内的元素

容器适配器(containeradaptor

函数对象(functor)

STL容器类别

序列式容器-排列次序取决于插入时机和位置

关联式容器-排列顺序取决于特定准则

STL容器的共同能力

所有容器中存放的都是值而非引用。如果希望存放的不是副本,容器元素只能是指针。

所有元素都形成一个次序(order),可以按相同的次序一次或多次遍历每个元素

STL容器元素的条件

必须能够通过拷贝构造函数进行复制

必须可以通过赋值运算符完成赋值操作

必须可以通过析构函数完称销毁动作

序列式容器元素的默认构造函数必须可用

某些动作必须定义operator==,例如搜寻操作

关联式容器必须定义出排序准则,默认情况是重载operator <

STL容器的共同操作

与大小相关的操作(size operator

size()-返回当前容器的元素数量

empty()-判断容器是否为空

max_size()-返回容器能容纳的最大元素数量

比较(comparison

==,!=,<,<=,>,>=

比较操作两端的容器必须属于同一类型

如果两个容器内的所有元素按序相等,那么这两个容器相等

采用字典式顺序判断某个容器是否小于另一个容器

STL容器的共同操作

赋值(assignment)和交换(swap)

swap用于提高赋值操作效率

与迭代器(iterator)相关的操作

begin()-返回一个迭代器,指向第一个元素

end()-返回一个迭代器,指向最后一个元素之后

rbegin()-返回一个逆向迭代器,指向逆向遍历的第一个元素

rend()-返回一个逆向迭代器,指向逆向遍历的最后一个元素之后

容器的共同操作

元素操作

insert(pos,e)-将元素e的拷贝安插于迭代器pos所指的位置

erase(beg,end)-移除[beg,end]区间内的所有元素

clear()-移除所有元素

迭代器(iterator)(示例:iterator)

可遍历STL容器内全部或部分元素的对象

指出容器中的一个特定位置

迭代器(iterator

所有容器都提供两种迭代器

container::iterator以“读/写”模式遍历元素

container::const_iterator以“只读”模式遍历元素

迭代器(iterator

迭代器分类

双向迭代器

可以双向行进,以递增运算前进或以递减运算后退、可以用==和!=比较。

list、set和map提供双向迭代器

随机存取迭代器

除了具备双向迭代器的所有属性,还具备随机访问能力。

可以对迭代器增加或减少一个偏移量、处理迭代器之间的距离或者使用<和>之类的关系运算符比较两个迭代器。

vector、deque和string提供随机存取迭代器

vector

vector模拟动态数组

vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public拷贝构造函数和重载的赋值操作符)

必须包含的头文件#include<vector>

vector支持随机存取

vector的大小(size)和容量(capacity)

size返回实际元素个数,

capacity返回vector能容纳的元素最大数量。如果插入元素时,元素个数超过capacity,需要重新配置内部存储器。

map/multimap

使用平衡二叉树管理元素

元素包含两部分(key,value),key和value可以是任意类型

必须包含的头文件#include<map>

根据元素的key自动对元素排序,因此根据元素的key进行定位很快,但根据元素的value定位很慢

不能直接改变元素的key,可以通过operator []直接存取元素值

map中不允许key相同的元素,multimap允许key相同的元素

#include <iostream>
#include <bitset>
using namespace std;

int main()

{

    bitset<64> bs;

    bs = 1;

    cout << bs << endl;
    bs ^= 63;
    cout << bs << endl;
    bs >>= 1;
    cout << bs << endl;
    cout << ~bs << endl;
    cout << "1 Bits: " << bs.count() << endl;
    cout << bs[32] << endl;
    bs.set(32);
    cout << bs[32] << endl;
    bs.flip(32);
    cout << bs[32] << endl;
    string t = bs.to_string();
    unsigned long t1 = bs.to_ulong();
    cout << t << endl << t1 << endl; 
    bs.reset();
    cout << bs << endl;
    cout <<  "Size: " << bs.size() << endl;
    cout << bs.any() << endl;
    cout << bs.none() << endl;
    cout << "input 0-1 string: " << endl;
    cin >> bs;
    cout << bs << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值