C++STL概述
STL提供三种类型的组件: 容器、迭代器和算法。它们都支持泛型程序设计标准。
容器主要有两类:顺序容器和关联容器(vector、list、deque和string等)是一系列元素的有序集合。关联容器(set、multiset、map和multimap)包含查找元素的键值。
迭代器的作用是遍历容器。
STL算法库包含四类算法:排序算法、不可变序算法、变序算法和数值算法。
下面主要介绍vector、string、set和map几个容器
vector向量容器
vector向量容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单、高效的容器,完全可以代替数组。
值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占的内存空间。
使用vector向量容器,需要头文件包含声明“include<vector>”。
创建vector对象
vector<int> v;
vector<int> v(10); //指定容器大小
vector<double> v(10,8.6); //指定容器大小和每个元素的初值
访问vector元素
可以采用下标方式随意访问它的某个元素,也可以用下标方式对元素重新赋值,类似于数组的访问方式.
常用的方法是用迭代器配合循环语句来对vector对象进行遍历访问,迭代器类型一定要与它要遍历的vector对象的元素一致.
vector常用的方法
push_back() //对vector容器在尾部追加新元素.
insert() //在vector对象的任意迭代器位置前插入一个新的元素.
erase() //可以删除vector中迭代器所指的一个元素或一段区间中的所有元素.
clear() //一次性删除vector中的所有元素.
size() //返回向量元素的个数
empty() //返回向量是否为空.
排列算法
需要定义头文件”#include<algorithm>”
reverse() //反向排列向量元素
sort() //对向量元素进行升序排列
string基本字符系列容器
string类提供了添加、删除。替换、查找和比较等丰富的方法。
使用string容器,需要头文件包含声明”#include<string>”
创建string对象
string str;
给string对象赋值
直接给字符串赋值
str = “Hello,C++STL”;
把字符指针赋值给一个字符串对象
str = pstr; //pstr为字符串指针
从string对象尾部添加字符或字符串
str = str + ‘a’;
str = str + “abc”;
访问string对象的元素
一般使用下标方式随机访问string对象的元素,下标是从0开始
string容器常用方法
append() //从尾部追加字符串
insert() //把一个字符插入到迭代器位置之前
erase() //删除string中迭代器所指的一个元素或一段区间中的所有元素.
要清空一个字符串,直接给它赋空字符串即可
length() //返回字符串的长度
empty() //返回字符串是否为空
replace() //替换string对象中的字符
find() //查找字符串中的第一个字符元素或子字符串,如果找到,则返回下标值,如果找不到,则返回4294967295
compare() //与其他字符串相比较.如果比对方大,则返回1;比对发小,则返回-1;相同,则返回0.
reverse() //将string对象迭代器所指向的一段区间中的元素(字符)反向排序.要包含”#include<algorithm>”
converToString() //将数值转换为string
converFromString() //将string转换为数值
set和multiset容器
需要包含”#include<set>”
一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。
而multiset中可以出现副本键,同一值可以出现多次。
创建set集合对象
set<int> s;
set集合的方法
begin() //返回指向第一个元素的迭代器
clear() //清除所有元素
count() //返回某个值元素的个数
empty() //如果集合为空,返回true
end() //返回指向最后一个元素之后的迭代器,不是最后一个元素
equal_range() //返回集合中与给定值相等的上下限的两个迭代器
erase() // 删除集合中的元素
find() //返回一个指向被查找到元素的迭代器
get_allocator() //返回集合的分配器
insert() //在集合中插入元素
lower_bound() //返回指向大于(或等于)某值的第一个元素的迭代器
key_comp() //返回一个用于元素间值比较的函数
max_size() //返回集合能容纳的元素的最大限值
rbegin() //返回指向集合中最后一个元素的反向迭代器
rend() //返回指向集合中第一个元素的反向迭代器
size() //集合中元素的数目
swap() //交换两个集合变量
upper_bound() //返回大于某个值元素的迭代器
value_comp() //返回一个用于比较元素间的值的函数
map映照容器
需包含头文件”#include<map>”
map映照容器的元素数据是有一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系
创建map对象
map<string,float> m;
m[“Jack”] = 98.5; //字符串”Jack”与数值”98.5”形成映照关系
map的方法
begin() //返回指向map头部的迭代器
clear() //删除所有元素
count() //返回指定元素出现的次数
empty() //如果map为空则返回true
end() //返回指向map末尾的迭代器
equal_range() //返回特殊条目的迭代器对
erase() //删除一个元素
find() //查找一个元素
get_allocator() //返回map的配置器
insert() //插入元素
key_comp() //返回比较元素key的函数
lower_bound() //返回键值>=给定元素的第一个位置
max_size() //返回可以容纳的最大元素个数
rbegin() //返回一个指向map尾部的逆向迭代器
rend() //返回一个指向map头部的逆向迭代器
size() //返回map中元素的个数
swap() //交换两个map
upper_bound() //返回键值>给定元素的第一个位置
value_comp() //返回比较元素value的函数