1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > STL(vector map stack)

STL(vector map stack)

时间:2018-11-25 18:31:03

相关推荐

STL(vector  map  stack)

Standard Template Library: 容器、迭代器、算法

***容器***

顺序容器:vector、deque、list

vector 从后面快速插入删除,直接访问任何元素

deque 从前面或后面快速的插入删除,直接访问任何元素

list 双链表,从任何地方快速插入删除

关联容器:map、set、multiset、multimap

是一种非线性的树结构,一种比较高效的特殊的平衡检索二叉树--红黑树。

容器适配器:stack、queue、priority_queue

是容器的接口,本身不能直接保存元素,其保存元素的机制是调用另一种顺序容器来实现。

***迭代器***:iterator

对容器中的对象进行访问,如同一个指针。

eg. vector<int>::iterator iter;

eg. list<string>::iterator iter;

eg. 使用迭代器遍历容器

for(vector<string>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)

{

std::cout<< *iter <<std::endl;

}

***算法***

头文件 algorithm

代码1:vector.cpp

1 /*2 * File: vector.cpp3 * ----------------4 * DATE: 08175 *6 */7 8 #include <iostream>9 #include <vector>10 #include <algorithm>11 12 void display(std::vector<int> &vec)13 {14 //迭代器15 for(std::vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++)16 {17 std::cout<< *iter <<std::endl;18 } 19 } 20 21 //谓词 大于6022 bool operator_biger60(int a)23 {24 return a > 60;25 } 26 27 //谓词 降序排列28 bool sort_bigger(int a,int b)29 {30 return a > b;31 } 32 33 int main()34 {35 int array[] = {50,65,80,92,93,53,78};36 std::vector<int> vec(array,array+6); //容器 vector<int>37 std::cout<< "before sort:" <<std::endl; 38 39 display(vec);40 41 //谓词42 std::cout<< "大于60个数:" << count_if(vec.begin(),vec.end(),operator_biger60) <<std::endl;43 44 //排序 谓词45 sort(vec.begin(),vec.end(),sort_bigger);46 std::cout<< "after sort:" <<std::endl;47 display(vec);48 49 //删除50 for(std::vector<int>::iterator iter = vec.begin();iter != vec.end();iter++)51 {52 if(*iter < 60)53 {54vec.erase(iter); //容器长度的改变将使迭代器失效55iter = vec.begin();//重新赋值 迭代器56 }57 }58 std::cout<< "after delete:" <<std::endl;59 display(vec);60 return 0;61 }

代码2:map.cpp

1 /*2 * FILE: map.cpp3 * -------------4 * DATE: 08175 *6 */7 8 #include <iostream>9 #include <map>10 #include <string>11 #include <algorithm>12 13 //map<key,value>14 //迭代器 map<int,string>::iterator iter15 void display(std::map<int,std::string> &m)16 {17 for(std::map<int,std::string>::iterator iter = m.begin();iter!=m.end();iter++)18 {19 std::cout<< iter->first << "," << iter->second <<std::endl;20 }21 }22 23 int main()24 {25 std::map<int,std::string> m;26 m.insert(std::make_pair(1000,"张三")); //使用make_pair 添加元素27 m.insert(std::pair<int,std::string>(1001,"李四"));//使用pair<int,string>( , ) 添加元素28 m[1002]="王五"; //使用下标添加元素29 std::cout<< "before: " <<std::endl;30 display(m);31 32 //若存在,则修改33 if(m.count(1002)) //count 计数34 {35 m[1002] = "麻五";36 }37 std::cout<< "after: " <<std::endl;38 display(m);39 40 return 0;41 }

代码3:stack.cpp

1 /*2 * FILE: stack.cpp3 * ---------------4 * DATE:081e5 *6 */7 8 #include <iostream>9 #include <stack>10 #include <string>11 #include <list>12 13 int main()14 {15 /* stack 栈_后进先出 */16 17 //栈 默认基于set实现18 std::stack<int> num; //定义 stack<int> num19 20 //修改 栈的基础容器,改为基于 list实现21 //stack<string, list<string> > 注意后面需要空格22 std::stack<std::string,std::list<std::string> >name; //定义 stack<string,list<string> > name23 num.push(10); //push()向栈中压入元素24 num.push(20);25 num.push(30);26 27 name.push("张三");//push()向栈中压入元素28 name.push("李四");29 name.push("马五");30 31 std::cout<< "num size:" << num.size() <<std::endl;//size()栈中元素的个数32 while(!num.empty())//empty()栈是否为空33 {34 std::cout<< num.top() <<std::endl;//top()栈的顶部元素,即最后压入的元素35 num.pop();//pop()弹出36 }37 38 std::cout<< "name size:" << name.size() <<std::endl;39 while(!name.empty())40 {41 std::cout<< name.top() <<std::endl;42 name.pop();43 }44 45 return 0;46 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。