C++标准程序库学习笔记

时间:2023-01-05 19:47:55

容器可分为两类:

1.序列式容器:可序群集,每个元素的位置取决于插入时间和地点,STL提供三个定义好的序列式容器:vector,list,deque

2.关联式容器:已序群集,元素的位置取决于元素值,STL提供四个定义好的关联式容器:map,multimap,set,multiset

deque是“double-end-queue”的缩写,在头部和尾部插入和删除元素十分迅速。他提供了 push_front和push_back操作,而vector只提供push_back操作。

关联式容器依据一定的排序准则,自动为元素排序,预设情况以operator <排序,也可以提供自己的比较函式,定义不同的排序准则。(见下面代码)关联式容器由二叉树实现,左子树的结点都比自己小,右结点都比自己大。

自定义排序准则示例:

C++标准程序库学习笔记#include <iostream>
C++标准程序库学习笔记#include 
<set>
C++标准程序库学习笔记
using namespace std;
C++标准程序库学习笔记
C++标准程序库学习笔记template 
<class T>
C++标准程序库学习笔记
class RuntimeCmp
C++标准程序库学习笔记C++标准程序库学习笔记
{
C++标准程序库学习笔记
public:
C++标准程序库学习笔记C++标准程序库学习笔记    
enum cmp_mode{normal,reverse};
C++标准程序库学习笔记
private:
C++标准程序库学习笔记    cmp_mode mode;
C++标准程序库学习笔记
public:
C++标准程序库学习笔记C++标准程序库学习笔记    RuntimeCmp(cmp_mode m
=normal):mode(m){}
C++标准程序库学习笔记    
bool operator()(const T &t1,const T &t2) const
C++标准程序库学习笔记C++标准程序库学习笔记    
{
C++标准程序库学习笔记        
return mode==normal?t1<t2:t2<t1;
C++标准程序库学习笔记    }

C++标准程序库学习笔记    
bool operator == (const RuntimeCmp &rc)
C++标准程序库学习笔记C++标准程序库学习笔记    
{
C++标准程序库学习笔记        
return mode==rc.mode;
C++标准程序库学习笔记    }

C++标准程序库学习笔记}
;
C++标准程序库学习笔记
C++标准程序库学习笔记typedef 
set<int ,RuntimeCmp<int>> IntSet;
C++标准程序库学习笔记
C++标准程序库学习笔记
void fill(IntSet &set);
C++标准程序库学习笔记
void print(IntSet &set);
C++标准程序库学习笔记
C++标准程序库学习笔记
int main()
C++标准程序库学习笔记C++标准程序库学习笔记
{
C++标准程序库学习笔记    IntSet coll1;
C++标准程序库学习笔记    fill(coll1);
C++标准程序库学习笔记    print(coll1);
C++标准程序库学习笔记
C++标准程序库学习笔记    RuntimeCmp
<int >reverse_order(RuntimeCmp<int>::reverse);
C++标准程序库学习笔记    IntSet coll2(reverse_order);
C++标准程序库学习笔记    fill(coll2);
C++标准程序库学习笔记    print(coll2);
C++标准程序库学习笔记
C++标准程序库学习笔记    coll1
=coll2;
C++标准程序库学习笔记    coll1.insert(
3);
C++标准程序库学习笔记    print(coll1);
C++标准程序库学习笔记
C++标准程序库学习笔记    
if(coll1.value_comp() == coll2.value_comp())
C++标准程序库学习笔记        cout
<<"same sortint"<<endl;
C++标准程序库学习笔记    
else 
C++标准程序库学习笔记        cout
<<"different sorting"<<endl;
C++标准程序库学习笔记    
return 0;
C++标准程序库学习笔记}

C++标准程序库学习笔记
C++标准程序库学习笔记
void fill(IntSet &set)
C++标准程序库学习笔记C++标准程序库学习笔记
{
C++标准程序库学习笔记    
set.insert(4);
C++标准程序库学习笔记    
set.insert(7);
C++标准程序库学习笔记    
set.insert(5);
C++标准程序库学习笔记    
set.insert(1);
C++标准程序库学习笔记    
set.insert(6);
C++标准程序库学习笔记    
set.insert(2);
C++标准程序库学习笔记    
set.insert(5);
C++标准程序库学习笔记}

C++标准程序库学习笔记
C++标准程序库学习笔记
void print(IntSet &set)
C++标准程序库学习笔记C++标准程序库学习笔记
{
C++标准程序库学习笔记    IntSet::iterator it
=set.begin();
C++标准程序库学习笔记    
for(it;it!=set.end();++it)
C++标准程序库学习笔记        cout
<<*it<<"   ";
C++标准程序库学习笔记    cout
<<endl;
C++标准程序库学习笔记}

C++程序库还提供了一些特别的(并未预先定义好的)容器配接器,包括stack,queue,priority queue

三种迭代器的配接器(iterator adapters):

1.Insert Iterators:可以使演算法以安插方式而不是覆盖方式运作,运用它,可以解决目标空间不足的问题,它会使目标空间的大小按需要成长,下面的例子演示了预先定义好的insert iterators

 

C++标准程序库学习笔记#include <vector>
C++标准程序库学习笔记#include 
<set>
C++标准程序库学习笔记#include 
<deque>
C++标准程序库学习笔记#include 
<list>
C++标准程序库学习笔记#include 
<algorithm>
C++标准程序库学习笔记
using namespace std;
C++标准程序库学习笔记
C++标准程序库学习笔记
int main()
C++标准程序库学习笔记C++标准程序库学习笔记
{
C++标准程序库学习笔记    list
<int > coll1;
C++标准程序库学习笔记    
for(int i=1;i<9;++i)
C++标准程序库学习笔记C++标准程序库学习笔记    
{
C++标准程序库学习笔记        coll1.push_back(i);
C++标准程序库学习笔记    }

C++标准程序库学习笔记    
C++标准程序库学习笔记    vector
<int> coll2;
C++标准程序库学习笔记    copy(coll1.begin(),coll1.end(),back_inserter(coll2));
C++标准程序库学习笔记
C++标准程序库学习笔记    deque
<int > coll3;
C++标准程序库学习笔记    copy (coll1.begin(),coll1.end(),front_inserter(coll3));
C++标准程序库学习笔记
C++标准程序库学习笔记    
set <int > coll4;
C++标准程序库学习笔记    copy(coll1.begin(),coll1.end(),inserter(coll4,coll4.begin()));
C++标准程序库学习笔记
C++标准程序库学习笔记    
return 0;
C++标准程序库学习笔记}

C++标准程序库学习笔记
C++标准程序库学习笔记

 

2.Stream Iterators

3.Reverse iterators

 函式演算法示例:

C++标准程序库学习笔记#include <vector>
C++标准程序库学习笔记#include 
<iostream>
C++标准程序库学习笔记#include 
<algorithm>
C++标准程序库学习笔记
using namespace std;
C++标准程序库学习笔记
C++标准程序库学习笔记
void print(int elem)
C++标准程序库学习笔记C++标准程序库学习笔记
{
C++标准程序库学习笔记    cout
<<elem<<"   ";
C++标准程序库学习笔记}

C++标准程序库学习笔记
C++标准程序库学习笔记
int main()
C++标准程序库学习笔记C++标准程序库学习笔记
{
C++标准程序库学习笔记    vector 
<int> coll;
C++标准程序库学习笔记    
for(int i=1;i<9;++i)
C++标准程序库学习笔记        coll.push_back(i);
C++标准程序库学习笔记    for_each(coll.begin(),coll.end(),print);
C++标准程序库学习笔记    cout
<<endl;
C++标准程序库学习笔记    
return 0;
C++标准程序库学习笔记}

仿函式示例(function object):

C++标准程序库学习笔记#include <vector>
C++标准程序库学习笔记#include 
<iostream>
C++标准程序库学习笔记#include 
<algorithm>
C++标准程序库学习笔记
using namespace std;
C++标准程序库学习笔记
C++标准程序库学习笔记
class PrintInt
C++标准程序库学习笔记C++标准程序库学习笔记
{
C++标准程序库学习笔记
public:
C++标准程序库学习笔记    
void operator()(int elem)  const
C++标准程序库学习笔记C++标准程序库学习笔记    
{
C++标准程序库学习笔记        cout
<<elem<<"  ";
C++标准程序库学习笔记    }

C++标准程序库学习笔记}
;
C++标准程序库学习笔记
C++标准程序库学习笔记
int main()
C++标准程序库学习笔记C++标准程序库学习笔记
{
C++标准程序库学习笔记    vector 
<int> coll;
C++标准程序库学习笔记    
for(int i=1;i<9;++i)
C++标准程序库学习笔记        coll.push_back(i);
C++标准程序库学习笔记    for_each(coll.begin(),coll.end(),PrintInt());
C++标准程序库学习笔记    cout
<<endl;
C++标准程序库学习笔记    
return 0;
C++标准程序库学习笔记}