您的位置:首页 > 其它

常用STL总结

2015-08-08 09:46 369 查看
map

map特性是,所有的元素都会根据元素的键值自动排序,map 所有的元素都是pair; map不允许拥有相同的键值。

map 底层机制为 RB-tree, 即红黑树。 是一种平衡二叉搜索树。自动排序效果很不错。

map<string,int> simap;
simap[string("C++")] = 1;
simap[string("c#")] = 2;

pair<string,int> value(string("jave"),3);
simap.insert(value);

map<string,int>::iterator simap_iter = simap.begin();
for(; simap_iter!= simap.end();simap_iter++)
cout<<simap_iter->first <<" "<<simap_iter->second<<endl;

map<string,int>::iterator itel;

itel = simap.find[string("java")];
if(itel == simap.end())
cout<<"not found";

map 中 swap 操作

map <int, int> m1, m2;
map <int, int>::iterator m1_Iter;
typedef pair <int, int> Int_Pair;

m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m2.insert ( Int_Pair ( 10, 100 ) );
m2.insert ( Int_Pair ( 20, 200 ) );

cout << "The original map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout   << "." << endl;

// This is the member function version of swap
//m2 is said to be the argument map; m1 the target map
m1.swap( m2 );

cout << "After swapping with m2, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout  << "." << endl;


swap 运行结果为

The original map m1 is: 10 20 30.
After swapping with m2, map m1 is: 100 200.


list

list 的 node 是 分为 prev, next 指针,以及数值 data。 list是个环状双向链表, 迭代器必须具备前移.后移的能力。相对 vector,list 是用多少就是多少空间,每次插入或者删除都配置一个元素空间。

list node

template <class T>
struct _list_node{
typedef void* void_pointer;
void_pointer prev;
void_pointer next;
T  data;
}


list Demo:

int i;
list<int> ilist;
ilist.push_back(0);
ilist.push_back(1);
ilist.push_back(3);

list<int>::iterator ite;
for(ite = ilist.begin();ite!=ilist.end();ite++)
cout<<*ite<<endl;

ite = find(ilist.begin(),ilist.end(),2);
ilist.insert(ite,9);

ite = find(ilist.begin(), ilist.end(),9);
ilist.erase(ite);


Vector

vector 是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。 支持随机存取。 为降低空间配置速度成本,vector实际配置的大小可能比客户端需求量大些,以备可能的扩充。

vector用两个迭代器指向连续空间使用范围,以 end_of_storage 指向尾端(含备用空间)。

class vector
{
...
protected:
iterator  start;
iterator  finish;
iterator  end_of_storage;
...
}


Refferencd:

《STL 源码剖析》 候捷
https://msdn.microsoft.com/en-us/library/ksxy3xeb.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: