STL容器

参考
零基础学c++ 杨彦强刘袁红王浩
编写高质量代码 李健

标准STL序列容器:vector,string,deque,list
标准STL关联容器:set,multiset,map,multimap
非标准序列容器:slist(单向链表),rope(重型字符串)
非标准关联容器:hash_set,hash_multiset,hash_map,hash_multimap----散列容器
标准STL容器:数组,bitset,valarray,stack,queue,priority_queue

序列式容器
vector向量(会自动增长的数组)
deque双端队列
list双向链表

vector和deque和list可以使用迭代器访问元素。
vector和deque可以使用下表访问元素,list不可以。

vector和deque和list可以使用push_back()在容器末尾添加元素。
deque和list可以使用push_front()在容器最前面添加元素,vector不可以(可以用insert在最前面插入)。

#include <iostream>  
#include <vector>  
#include <list>  
#include <deque>  
#include<algorithm>

using namespace std;  
void func(vector<int>::value_type v)
{
    cout<<v<<"  ";
}
int main()  
{  
    vector<int> obv;                              //创建一个空的vector  
    obv.push_back(1);
    obv.push_back(9);
    cout<<"obv的元素个数为:"<<obv.size()<<endl; //size()用以返回元素的个数  
    for_each(obv.begin(),obv.end(),func);//使用算法遍历容器
    cout<<endl;  

    double sz[5]={1,2,3,4,5};                       //创建double型数组sz  
    deque<double> obD(sz,sz+5);                       //创建deque型容器obD,并用sz的首地址和末地址为其初始化,第5种方式  
    for(deque<double>::size_type i=0;i<obD.size();i++)  //对obD中的元素进行随机访问,下标表示法  
    {  
        cout<<obD[i]<<"  ";  
    }  
    cout<<endl;                                       //换行  

    list<float> obL(3,5);                         //创建一大小为3的list型容器obL,其中每个元素都初始化为5  
    list<float>::iterator iter=obL.begin();           //创建list<float>型迭代器,类似指针的概念,并使其指向obL的第一个元素  
    while(iter!=obL.end())                          //while结构,直到iter指向obL的尾部  
    {  
        cout<<(*iter)<<"  ";                        //通过迭代器间接访问容器中的元素,和指针相似  
        iter++;                                     //指向下一个元素  
    }  
    cout<<endl;                                      //换行  

    getchar();
    return 0;  
}  
obv的元素个数为:2
1  9
1  2  3  4  5
5  5  5


关联式容器
set
multiset
map
multimap

set
#include <iostream>
#include <set>							//使用set必须包括此头文件
using namespace std;
int main()
{
	int sz[9]={2,1,3,5,4,6,3,5,6};		//定义int型数组,数组名相当于指针(迭代器)
	set<int> A(sz,sz+9);				//将迭代器区间作为参数创建容器对象A
	cout<<A.size()<<endl;				//输出A中元素个数
	set<int>::iterator it=A.begin();	//创建set<int>::iterator迭代器it,指向A头部
	while (it!=A.end())					//输出全部元素
	{
		cout<<(*it)<<"  ";
		it++;
	}
	cout<<endl;
	return 0;
}

6
1  2  3  4  5  6



multiset
#include <iostream>
#include <set>							//使用multiset必须包括此头文件
using namespace std;
int main()
{
	int sz[9]={2,1,3,5,4,6,3,5,6};		//定义int型数组,数组名相当于指针(迭代器)
	multiset<int> A(sz,sz+9);			//将迭代器区间作为参数创建容器对象A
	cout<<A.size()<<endl;				//输出A中元素个数
	multiset<int>::iterator it=A.begin();//创建multiset<int>::iterator迭代器it,指向A头部
	while (it!=A.end())					//输出全部元素
	{
		cout<<(*it)<<"  ";
		it++;
	}
	cout<<endl;
	getchar();
	return 0;
}
9
1  2  3  3  4  5  5  6  6



map
#include <iostream>
#include <map>										//使用map容器要包含的头文件
#include <string>									//使用string类要包含的头文件
using namespace std;
int main()
{
	//创建part<int,string>型数组
	pair<int,string> sz[4]={ pair<int,string> (9,"Asia"),pair<int,string> (4,"Africa"),
							 pair<int,string> (1,"Euro"),pair<int,string> (4,"America") };
	map<int,string> obM(sz,sz+4);					//用迭代器区间构造obM
	cout<<obM.size()<<endl;							//输出obM中的元素个数
	map<int,string>::iterator it=obM.begin();		//创建map<int,string>模板类的迭代器,指向obM的头部
	while (it!=obM.end())							//按顺序逐个输出obM中的元素
	{
		cout<<(*it).first<<": "<<(*it).second<<endl;
		it++;
	}
	getchar();
	return 0;
}
3
1: Euro
4: Africa
9: Asia


multimap

#include <iostream>
#include <map>										//使用multimap容器要包含的头文件
#include <string>									//使用string类要包含的头文件
using namespace std;
int main()
{
	//创建part<int,string>型数组
	pair<int,string> sz[4]={ pair<int,string> (9,"Asia"),pair<int,string> (4,"Africa"),
		pair<int,string> (1,"Euro"),pair<int,string> (4,"America") };
	multimap<int,string> obM(sz,sz+4);					//用迭代器区间构造obM
	cout<<obM.size()<<endl;							//输出obM中的元素个数
	multimap<int,string>::iterator it=obM.begin();		//创建multimap<int,string>模板类的迭代器,指向obM的头部
	while (it!=obM.end())							//按顺序逐个输出obM中的元素
	{
		cout<<(*it).first<<": "<<(*it).second<<endl;
		it++;
	}
	getchar();
	return 0;
}
4
1: Euro
4: Africa
4: America
9: Asia



散列容器




你可能感兴趣的:(STL容器)