STL概括!

1.

list:双向循环链表list<int> l;

链表节点分散,对于迭代器,只能“++”或“--”,而不能“+n”或“-n”,此处与vector不同

方法:

push_front(新数据) 往首部插入新元素

push_back(新数据)

insert(iterator,新元素)往迭代器位置插入新元素

 

pop_front(数据)

pop_back(数据)

erase(迭代器)删除迭代器位置数据

remove(数据) 删除所有等值节点

clear(void)清空列表

 

it = find(l.begin(),l.end(),数据) 若找到该元素 则该元素的迭代器位置,否则返回end()迭代器位置

 

sort(void) 升序排序

 

unique(void)  去连续重复

 

cout<<*it<<” “;

               

 

 

数据从前到后为:2 1 5

正向遍历

list<int>::iterator it;

for(it = l.begin();it != l.end();it++)  //2 1 5

反向遍历

list<int>::reverse_iterator rit;

for (rit = l.rbegin();rit !=l.rend();rit++)  //5 1 2

 

 

 2.

vector:动态数组

vector<int> v;

vector<doube> v(10); //大小为10

vector<double> v(10,8.6);  //初始化 10个8.6

 

方法:

push_back();

insert(位置,元素)

erase(迭代器)删除迭代器位置数据

erase(位置,位置) 删除一段区域内的元素

sort(位置,位置,comp)

bool comp(const int &a,const int&b) {return a > b;} 降序排序

reverse(位置,位置)倒置一段区域内的元素

size()返回向量的大小

empty() 向量空为1,非空为0

 

可用迭代器和数组下标的方式访问内容

 

3.

string:

string s;

length() 不包括‘\0’的长度

s = s + ‘a’;用于在尾部添加字符

append(“123”);    同     s = s + “123”;用于在尾部添加字符串

insert(it + 1,’a’);

erase(位置) 删除某一个位置的元素

erase(位置,位置) 清空可以直接赋空值

replace(3,3,“good”) 从第三个位置开始将连续3个字符替换为“good”

find(‘字符’) 或find(“字符串”)返回第一个位置下标,否则返回4294967295

s.compare(“字符串”)     s大则返回1 等0 小-1

reverse(位置,位置)

printf(s.c_str()); printf()输出字符串对象

 

sscanf(“abc 123 pc”,”%s %s %s”,sa,sb,sc);字符串分隔为子串,分隔符为空格

sscanf(“1 2 3”,“%d %d %d”,&a,&b,&c);字符串分离为数字,分隔符为空格

sscanf(“4,5$6”,”%d,%d$%d”,&x,&y,&z);分隔符不为空格

 

 

 

可以直接拿一个字符串赋值,或者char[]类型的指针赋值

可以拿数组下标访问

String放在vertor中可以用二维数组下标的形式访问

 

用流的方式相互转换数值和string对象

 

4.

Queue:

Queue<int> q;

Push()

Pop()

Front()

Back()

Empty()

Size()

 

5.

Stack<int>s;

Push()

Pop()

Top()

Empty()

Size()

 

6.

Bitset:

Bit位元素的序列容器,每个元素只占一个bit位,取值0或1,因此很节省空间

定义时必须制定容器大小,大小不可改

方法:

 7.

Set:

实现了红黑树的平衡二叉检索树

插入时,自动调整二叉树的排列,确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值;

另外,还得确保更节点左子树的高度与右子树的高度相等,这样高度最小,从而检索速度最快;

       不会重复插入相同键值得元素,采取忽略处理

 

其检索是采用中序遍历,所以检索效率高,且从小到大排序,

 

补课直接修改键值,修改后,set会旋转子树以保持新的平衡,修改的键值很可能就不在原来的位置上。实际上,set的主要目的是为了快速检索

Set<int> s;

方法:

Insert(元素)

 

Set<int,mycomp> s;

Insert(元素)    //自定义比较函数mycomp,重载“()”操作符

//若元素是结构体,则直接把比较函数写在结构体内,重载“<”

Struct mycomp {

Bool operator()(const int &a,const int &b) {

Return a > b;

};

 

 

Erase(元素)

Clear(void)

Size(void)

Find(元素) 若找到则返回元素迭代器位置,否则返回end()位置

 

 

Iterator

Reverse_iterator

 

9.

Multiset:

允许重复元素键值插入的set

 

10.

Map:

元素是由一个键值(下标)和一个映照数据组成,由键值映射到映照数据,键值不允许重复

采用红黑树来实现,只对元素的键值实现比较和排序

 

Find(键值)  find只能用来搜索键值

 

 11.

Map<string,float> m;

m["Jack"]=98.5; //把键值当做数组下标赋值

Cout<<(*it).first<<”:”<<(*it).second<<endl;

 

 

对数字的各位进行分离,采用取余等数学方法操作是很耗时的。而把数字当成字符串,使用map 的映照功能,很方便地实现了数字分离。下面这个程序将一个字符串中的字符当 成数字,并将各位的数值相加,后输出各位的和。

#pragma warning(disable:4786)

#include <string>

#include <map>

#include <iostream>

using namespace std;

int main(int argc, char* argv[]) { 

//定义 map 对象,当前没有任何元素 

map<char,int>m; 

//赋值:字符映射数字 

for(intj=0;j<10;j++)  {   m['0'+j]=j; }

string sa="6234",sb; 

int sum=0; 

for(int i=0;i<sa.length();i++)  {  sum+=m[sa[i]];  } 

cout<<"sum= "<<sum<<endl; 

return 0;

}

 

也可以利用类似的方法把数字映射成相应的字符串从而可以直接加到string对象的尾部

 

 12.

Multimap:

允许重复的map

 

方法:

Insert(pair<string,double>(“Jack”,300.5);

erase("Jack"); //可以删除某个迭代器位置上的元素,等于某个键值得所有重复元素,一个迭//代器期间上的元素

clear()

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值