我是靠谱客的博主 有魅力奇迹,最近开发中收集的这篇文章主要介绍STL学习总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

基础知识点:

|STLC++标准程序库的核心,深刻影响了标准程序库的整体结构;

|STL构成为可适应不同需求的集合类和在这些数据集合上操作的算法;

|STL内的所有组件有模板构成,其元素可以是任意类型;

|所有C++编译器和所有操作系统都支持STL

 

|STL组件为容器、迭代器、算法三部分构成;

容器为管理某类对象的集合;

迭代器为在对象集合(容器)上进行遍历;

算法为处理集合内的元素;

 

|容器类别:

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

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

 

STL容器的共同操作:

{

|初始化:

产生一个空容器:

std::list<int>l;

以另一个元素为初值完成初始化:

std::list<int>l;

...

std::vector<float>c(l.begin(),l.end());

以数组元素为初值完成初始化:

int array[]={2,4,6};

...

std::set<int>c(array,array+sizeof(array)/sizeof(array[0]));

 

|与大小相关的操作:

size():返回当前容器的元素数;

empty():判断容器是否为空;

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

 

|比较:

==!=<<=>>=

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

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

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

 

|赋值和交换:

swap用于提高赋值交换操作效率;

 

|与迭代器相关的操作:

begin():返回一个迭代器,指向一个元素;

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

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

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

 

|元素操作:

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

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

clear():移除所有元素;

}

 

迭代器:

{

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

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

 

|迭代器的基本操作:

*:返回当前位置上的元素值,若该元素有成员,可通过迭代器以operator->取用;

++:将迭代器前进至下一元素;

==!=:判断俩个迭代器是否指向同一位置;

=:为迭代器赋值;

 

|所有容器都提供获得迭代器的函数;

半开区间[beg,end)的好处:

1、为遍历元素时循环的结束时机提供了简单的判断依据(只要为达到end()循环就可以继续);

2、不必对空区间采取特殊处理;

 

|所有容器都提供俩种迭代器

container::iterator以“读写”元素遍历元素;

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

 

|迭代器分类:

双向迭代器:

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

listsetmap提供双向迭代器;

list<int>l;

for(pos=l.begin();pos!=l.end();++pos

{..}

|随机存取迭代器

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

可以对迭代器增加或者减少一个偏移量,处理迭代器之间的距离;

vectordequestring提供随机存取迭代器;

}

map/multimap

|构造拷贝析构:

map c:产生新的map;

map c1(c2):产生同类型的c1,并复制c2的所有元素;

map c(op):op为排序准则产生一个新的map;

map c(beg,end):以区间[beg,end],内的元素产生一个map;

map c[beg,end,op]:以op为排序准则,以区间[beg,end]中的元素产生一个map;

~map():销毁所有元素并释放内存;

 

|map可以为以下形式:

map<key,value>是一个以<为排序准则的map;

map<key,value,op>一个以op为排序准则的map;

 

|非变动操作:

c.size()返回元素的个数;

c.empty()判断容器是否为空;

c.max_size()返回元素最大可能数量;

c1==c2判断二者是否相等;

c1!=c2判断二者是否不相等;

c1<c2判断是否小于;

c1>c2判断是否大于;

c1<=c2;c1>=c2;同上;

 

|赋值

c1=c2;c2的全部元素赋值给c1;

c1.swap(c2);c1c2的元素互换;

swap(c1,c2);同上,全局函数;

 

|特殊搜索操作:

count(key);返回键值等于key的元素个数;

find(key);返回键值等于key的第一个元素,找不到的话返回end;

lower_bound(key)返回键值大于等于key的第一个元素;

upper_bound(key)返回键值大于key的第一个元素;

equal_range(key)返回键值等于key的元素区间;

 

map实例:

#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
struct T1
{
int v;
bool operator <(const T1 &a)const
{
return (v <a.v);
}
};
struct T2
{
int v;
};
struct cmp
{
bool operator () (const T2 &a, const T2&b)const
{
return (a.v <b.v);
}
};
int main()
{
map<T1,int>mt1;
map<T2, int,cmp>mt2;
map<string,int> m2;
map<string,int>::iterator m2i, p1, p2;
//map<string, int,greater<string> >m2;//greater<string>默认小大排序
//map<string, int,greater<string> >::iterator m2i, p1, p2;//迭代器
m2["abd"] =2;
m2["abc"] =1;
m2["cba"] =2;
m2.insert(make_pair("aaa", 9));
//make_pair 属于算法的内容,将两盒数组合成整体
m2["abf"] =4;
m2["abe"] =2;
cout <<m2["abc"] << endl;
m2i=m2.find("cba");
if(m2i != m2.end())
{
cout <<m2i->first << ": " <<m2i->second << endl;
}
else
{
cout <<"find nothing" << endl;
}
cout <<"Iterate" << endl;
for(m2i = m2.begin();m2i != m2.end(); m2i++)
{
cout <<m2i->first << ": " <<m2i->second << endl;
}
return 0;
}


multimap实例:

 

#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
int main()
{
multimap<string,int> mm1;
multimap<string,int>::iterator mm1i, p1, p2;
mm1.insert(make_pair("b", 3));
mm1.insert(make_pair("a", 0));
mm1.insert(make_pair("b", 5));
mm1.insert(make_pair("c", 4));
mm1.insert(make_pair("b", 2));
cout <<"Size: " << mm1.size() << endl;
for(mm1i =mm1.begin(); mm1i != mm1.end(); mm1i++)
{
cout <<mm1i->first << ": " <<mm1i->second << endl;
}
cout <<"COUNT: " << mm1.count("b")<< endl;//b 的个数
cout <<"Bound: " << endl;
p1=mm1.lower_bound("b");
p2=mm1.upper_bound("b");
for(mm1i = p1; mm1i!= p2; mm1i++)
{
cout <<mm1i->first << ": " <<mm1i->second << endl;
}
return 0;
}




学习心得:

STL具有高可重用性,高通用性,跨平台等优点,并且其内包含了些许多经典算法,适用于多种类型的数据,其为程序开发提供了许多宝贵的“零件”,方便了软件的开发,使得代码大大简化,功能强大并大幅度提升了效率,而不用耗费太多精力放在算法上,确实方便了编程操作。

其中迭代器将算法与容器联系起来,为容器中的元素分配储存空间,为算法执行期间产生的对象提供机制。

虽然上述部分,对于初学者而言 ,有些抽象,且难以理解,但相信通过丰富实践后,最后定能运用得行云流水,得心应手,对C++有更深刻地掌握。



最后

以上就是有魅力奇迹为你收集整理的STL学习总结的全部内容,希望文章能够帮你解决STL学习总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部