常用STL总结

来源:互联网 发布:madness淘宝店哪个真 编辑:程序博客网 时间:2024/06/05 22:16

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

0 0