STL (程序整理集)

 发布日期:2019-01-19 08:28:54  阅读次数:阅读数:41  来源:

(1)使用STL算法sort()实现整形数组a的递增排序:

#include<algorithm>
using namespace std;
void main()
{
int a[]={2,5,4,1,3};
sort(a,a+5);
for(int i=0;i<5;i++)
printf("%d",a[i]);//输出:1 2 3 4 5
printf("\n");
}

(2)
*迭代器正向输出所有元素

#include<vector>
using namespace std;
int main()
{
vector<int>myv;
myv.push_back(1);//vector的成员函数push_back()在myv的末尾插入元素
myv.push_back(2);
myv.push_back(3);
vector<int>::iterator it//定义正向迭代器it
for(it=myv.begin();it!=myv.end();++it)//从头到尾遍历所有元素
printf("%d",*it);//输出:1 2 3
printf("\n");
}
*迭代器反向输出所有元素

```cpp
#include<vector>
using namespace std;
int main()
{
vector<int>myv;
myv.push_back(1);//vector的成员函数push_back()在myv的末尾插入元素
myv.push_back(2);
myv.push_back(3);
vector<int>::iterator rit//定义正向迭代器it
for(rit=myv.rbegin();rit!=myv.rend();++rit)//从头到尾遍历所有元素
printf("%d",*rit);//输出:3 2 1
printf("\n");
}

3.顺序容器 vector容器的应用

#include<vector>
using namespace std;
void main()
{
vector<int>myv;//定义 vector容器myv
vector<int>::iterator it;//定义myv的正向迭代器
myv.push_back(1);// 在myv末尾添加元素1
it=myv.begin();//it迭代器指向开头元素1
myv.insert(it,2);//在it指向的元素之前插入元素2
myv.push_back(3);
myv.psuh_back(4);
it=myv.end();//it迭代器指向末尾元素4的后面
it--;
myv.erase(it);//删除元素4
for(it=myv.begin();it!=myv.end();it++)
printf("%d",*it);
printf("\n");
}

4.顺序容器字符串容器(string)

#include<iostream>
#include<string>
using namespace std;
void main()
{
	string s1="",s2,s3="Bye";
	s1.append("Good morning");//append给s1添加一个字符串,s1="Good morning"
	s2=s1;
	int i=s2.find("morning");//i=5
	s2.replace(i,s2,length()-i,s3);//替换了morning为Bye
	cout<<"s1:"<<s1<<endl;
	cout<<"s2:"<<s2<<endl;
	}

  1. 顺序容器双端队列容器(deque)
#include<deque>
using namespace std;
void disp(deque<int>dq)//输出dq所有元素
{
deque<int>::iterator iter;//定义迭代器 iter
for(iter=dq.begin();iter!=dq.end();itrt++)
printf("%d",*iter);
printf("\n");
}
void mian()
{
deque<int>dq;//建立一个双端队列
dq.push-front(1);//在队头插入1
dq.push_back(2);//在队尾插入2
dq.push_front(3);//在队头插入3
dq.push_back(4);//在队尾插入4
printf("dq:");disp(dq);
dq.pop_front();//删除队头元素
dq.pop_back();//删除队尾元素
printf("dq:");disp(dq);
}

7.顺序容器list(链表容器):不支持随机访问,因此提供sort()成员函数用于元素的排序
定义方式:

list<int>l1;//指定元素为int的链表l1
list<int>l2(10);//指定链表l2的初始大小为10个int元素
list<double>l3(10,1.23);//指定l3的10个初始元素的初值为1.23
list<int>l4(a,a+5);//用数组a[0...4]5个元素初始化l4

eg一个程序:

#include<list>
using namespace std;
void disp(list<int>&lst)//输出lst的所有元素
{
	list<int>::iterator it;
	for(it=lst.begin();it!=lst.end();it++)
	printf("%d",*it);
	printf("\n");
	}
	void main(){
	list<int>lst;
	list<int>::iterator it,start,end;
	lst.push_back(5);
	lst.push_back(2);
	lst.push_back(4);
	lst.push_back(1);
	lst.push_back(3);
	printf("初始lst:");disp(lst);
	it=lst.begin();//指向首元素5
	start=++lst.begin();// start指向第二个元素2
	end=--lst.end();//end指向尾元素3
	lst.insert(it,start,end);
	printf("执行lst,..insert(it,start,end)\n");
	printf(插入后lst:");disp(lst);
	}

二 .关联容器
1.set(集合容器)/multiset( 多集合容器)
eg程序:

#include<set>
using namespace std;
void main()
{
	set<int>s;//定义set容器s
	set<int>::iterator it;//定义容器迭代器it
	s.insert(1);
	s.insert(3);
	s.insert(2);
	s.insert(4);
	s.insert(2);
	printf("s:");
	for(it=s.begin();it!=s.end();it++)
	printf("%d",*it);
	printf("\n");
	multiset<int>ms;//定义multiset容器ms
	mulitiset<int>::iterator mit;
	ms.insert(1);
		ms.insert(3);
	ms.insert(2);
	ms.insert(4);
	ms.insert(2);
	printf("ms:");
	for(mit=ms.begin();mit!=ms.end();mit++)
	printf("%d",*mit);
	printf("\n");
	}

2.map(映射容器)/multimap(多重映射容器)
eg程序:

#include<map>
using namespace std;
void main(){
map<char,int>mymap;
map.insert(pair<char,int>('a',1));//插入方式1
mymap.insert(map<char,int>::value_type('b',2));//插入方式2
mymap['c']=3;//插入方式3
map<char,int>::iterator it;
for(it=mymap.begin();it!=mymap.end();it++)
printf("]%c.%d]",it->first,it->second);
printf("\n");
}

三.适配器容器
1.stack(栈容器):与数据结构中的栈一样,具有后进先出的特点,且只有一个出口,即栈顶,可以在栈顶进行插入(进栈)和删除(出栈)元素,而不允许 顺序遍历,所以stack中没有begin()/end(),rbngin()/rend()这样的成员函数,主要有:empty(),size(),push(elem,元素elem进栈),top()//返回栈顶元素,pop()//元素出栈。
eg以下语句指定myst栈的底层容器为vector:

stack<string,vector<string>>myst;//第2个参数指定底层容器为vector

eg一个程序:

#include<stack>
using namespace std;
void main(){
stack<int>st;
st.push(1);st.push(2);st.push(3);
printf("栈顶元素:%d\n",st.top());
while(!st.empty())//栈不为空时出栈所有元素

{
printf("%d",st.top());
st.pop();
}
printf("\n");
}

2.queue(队列容器)
eg程序:

#include<queue>
using namespace std;
void main(){
queue<int>qu;
qu.push(1);qu.push(2);qu.push(3);
printf(" 队头元素:%d\n",qu.front());
printf("队尾元素:%d\n",qu.back());
printf("出队顺序:");
whlile(!qu.empty())//出队所有元素
{
printf("%d",qu.front());
qu.pop();
}
printf("\n");
}

3.priority_queue(优先队列容器):一种受限访问操作的存储结构。
优先队列中优先级的高低由队列中数据元素的关系函数(比较运算符)确定,用户可以使用默认的关系函数 (对于内置数据类型,默认关系函数时值越大优先级越高),也可以重载自己编写的关系函数。
以优先级确定谁先出队,eg程序:

#include<queue>
using namespace std;
void main(){
priority_queue<int>qu;
qu.push(3);qu.push(1);qu.push(2);
printf("队头元素:%d\n",qu.top());
printf("出队顺序:");
while(!qu.empty())
{
printf("%d",qu.top());
qu.pop();
}
printf("\n");
}
如果您有好的新闻与建议,欢迎点击文章投稿

    发表评论

    电子邮件地址不会被公开。

  • 内容

  • 网名