C++STL概述

来源:互联网 发布:js 数组中查找值 编辑:程序博客网 时间:2024/06/05 10:44

C++STL概述

STL提供三种类型的组件: 容器、迭代器和算法。它们都支持泛型程序设计标准。

容器主要有两类:顺序容器和关联容器(vectorlistdequestring等)是一系列元素的有序集合。关联容器(setmultisetmapmultimap)包含查找元素的键值。

迭代器的作用是遍历容器。

STL算法库包含四类算法:排序算法、不可变序算法、变序算法和数值算法。

下面主要介绍vectorstringsetmap几个容器

 

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转换为数值

 

 setmultiset容器

需要包含”#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的函数

0 0