简单了解STL
来源:互联网 发布:网络人 编辑:程序博客网 时间:2024/06/07 12:33
序列(sequence)容器与关联(associative)容器。
#include <iostream>using namespace std;#include <vector>#include <string>class Person //声明Person类{public: Person(char *Name, char Sex, int Age ) //构造函数 { strcpy(name, Name); sex = Sex; age = Age; } ~Person( ){ } //析构函数 void Show( ) { cout << " The person’s name: " << name << endl; cout << " sex: " << sex << endl; cout << " age: " << age << endl; }private: //私有数据成员 char name[11]; //姓名,不超过5个汉字 char sex; //性别,M:男,F:女 int age; //年龄};int main( ){ vector<Person> v; //构造空向量v Person person1("Tom", 'M', 18); v.push_back(person1); //在向量v的尾部插入person1 Person person2("Mary", 'F', 19); v.push_back(person2); //在向量v的尾部插入person2 Person person3("Mike", 'M', 19); v.push_back(person3); //在向量v的尾部插入person3 for ( int i = 0; i < 3; i++ ) v[i].Show(); return 0; }
程序运行结果如下:
Theperson’s name: Tom
sex: M
age: 18
Theperson’s name: Mary
sex: F
age: 19
Theperson’s name: Mike
sex: M
age: 19
1.2 list(表)#include<iostream>#include<list> //链表头文件using namespace std;int main(){ int i; list<int> L1,L2; int a1[]={100,90,80,70,60}; int a2[]={30,40,50,60,60,60,80}; for(i=0;i<5;i++) L1.push_back(a1[i]); for(i=0;i<7;i++) L2.push_back(a2[i]); L1.reverse(); //将L1链表倒序 L1.merge(L2); //将L2合并到L1链表中 cout<<"L1的元素个数为:"<<L1.size()<<endl; L1.unique(); //删除L1中相邻位置的相同元素,只留1个 while(!L1.empty()){ cout<<L1.front()<<"\t"; L1.pop_front(); //删除L1的链首元素 } cout<<endl; return 0;}
程序运行结果如下:
L1的元素个数为:12
30 40 50 60 70 80 90 100
1.3 stack(堆栈)
#include<iostream>#include<set>using namespace std;int main(){ set<int> s; set<int>::iterator ps; multiset <int> ms; multiset<int>::iterator pms; s.insert(1); s.insert(8); s.insert(2); s.insert(1); ms.insert(1); ms.insert(8); ms.insert(2); ms.insert(1);cout<<" the set:"<<endl; for(ps=s.begin();ps!=s.end();ps++) cout<<*ps<<" "; cout<<endl; cout<<" the multiset:"<<endl; for(pms=q.begin();pms!=q.end();pms++) cout<<*pms<<" "; cout<<endl; return 0;}
程序运行结果如下:
theset:
1 2 8
themultiset:
1 1 2 8
注意:与char*字符串不同的是,string类型的字符串不一定以“\0”终止,其长度可用成员函数length读取,可用下标运算符[]访问其中的单个字符,起始下标为0,终止下标是字符串长度减1。
#include<iostream>#include<list>using namespace std;int main(){int i;//L1、L2为空链表,L3为有10个元素的链表list<int> L1, L2, L3(10); list<int>::iterator iter; //定义迭代器iter int a1[]={100,90,80,70,60}; int a2[]={30,40,50,60,60,60,80};
//插入L1链表元素,在表尾插入 for(i=0;i<5;i++) L1.push_back(a1[i]); //插入L2链表元素,在表头插入 for(i=0;i<7;i++) L2.push_front(a2[i]); //通过迭代器顺序输出L1的所有元素 for(iter=L1.begin();iter!=L1.end();iter++) cout<<*iter<<"\t"; cout<<endl;int sum=0; //通过迭代器反向输出L2的所有元素 for(iter=--L2.end();iter!=L2.begin();iter--){ cout<<*iter<<"\t"; sum+=*iter; //计算L2所有链表节点的总和 } cout<<"\nL2: sum="<<sum<<endl; int data=0; //通过迭代器修改L3链表的内容 for(iter=L3.begin();iter!=L3.end();iter++) *iter=data+=10; //通过迭代器输出L3的内容 for(iter=L3.begin();iter!=L3.end();iter++) cout<<*iter<<"\t"; cout<<endl;//通过迭代器反序输出L3的所有元素 for ( iter = --L3.end( ); iter != L3.begin( ); iter-- ) cout << *iter << "\t"; cout << *L3.begin( ) << endl; //通过逆向迭代器反序输出L3的所有元素 for ( rsiter = --L3.rend( ); rsiter != L3.rbegin( ); rsiter-- ) cout << *rsiter << "\t"; cout << *L3.rbegin( ) << endl; return 0;}
3、算法
#include <iostream>#include <string> //用于人机界面交互#include <vector> //为了使用vector容器#include <algorithm> //为了使用sort算法#include <iterator> //为了使用输入输出迭代器using namespace std;int main(void) { typedef vector<int> IntVector;typedef istream_iterator<int> IstreamItr;typedef ostream_iterator<int> OstreamItr;typedef back_insert_iterator< IntVector > BackInsItr;// STL中的vector容器IntVector num;//从标准输入设备读入整数,直到输入的是非整型数据为止cout << "请输入整数序列,按任意非数字键并回车结束输入\n";copy(IstreamItr(cin), IstreamItr(), BackInsItr(num));//提示程序状态cout << "排序中……\n";// STL中的排序算法sort(num.begin(), num.end());cout<<"排序完毕的整数序列:\n";copy(num.begin(), num.end(), OstreamItr(cout, "\n"));//使输出窗口暂停以观察结果system("pause");return 0;}4、函数对象
template<class RandomAccessIterator>
voidsort(RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
voidsort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
#include <iostream>using namespace std; #include <algorithm>#include <functional>int main( ){ int a[] = {1,3,2,4,5,7}; sort(&a[0], &a[6]); //递增排序 for(int i = 0; i < 6; i++) cout<<a[i]<<' '; cout<<endl; sort(&a[0], &a[6], greater<int>()); //递减排序 for(int i = 0; i < 6; i++) cout<<a[i]<<' '; cout<<endl; return 0; }
简单地说,函数对象其实就是一些使用起来像调用函数一样的对象,如:一般的函数,函数指针,或重载了函数调用运算符()的类的实例等,使用这些对象的方式好像调用函数一样,所以称这些对象为函数对象。
#include <iostream>#include <algorithm>#include <functional>#include <vector>using namespace std;void Print(int x) //普通函数{ if(x>=0&&x<=100) cout<<x<< " "; }typedef void(*ptPrint)(int x);ptPrint prt=Print; //函数对象指针class cPrint //重载了( )运算符的类cPrint{public: void operator () (int val) { if(val>=0&&val<=100) cout<<val<< " "; }};int main( ){ int a[] = {1,3,2,4,5,7}; const int N=sizeof(a)/sizeof(int); vector<int> vectorA(a,a+N); for_each(vectorA.begin(), vectorA.end(), Print); cout<<endl; for_each(vectorA.begin(), vectorA.end(), prt); cout<<endl; for_each(vectorA.begin(), vectorA.end(), cPrint( ) ); cout<<endl; return 0; }
template <class Arg, class Result>struct unary_function { typedef Arg argument_type; typedef Result result_type;};template <class Arg1, class Arg2, class Result>struct binary_function { typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Result result_type;};
#include <vector> #include <algorithm> #include <functional> #include <string> #include <iostream> using namespace std; #pragma argsusedclass Grade{public: Grade(int id,string name,int score) { ID=id; Name=name; Score=score; }int ID; string Name; int Score;};void printScore(Grade grade) //打印学生成绩{ cout<<grade.ID<< " " <<grade.Name<< " " <<grade.Score<<endl; }//函数对象类class gradeCompare:binary_function<Grade,Grade, bool>{public: bool operator () (Grade X,Grade Y) const { return X.Score>Y.Score; }}; int main( ){ vector<Grade> finalGrade; finalGrade.push_back(Grade(1,"A",56)); finalGrade.push_back(Grade(2,"B",57)); finalGrade.push_back(Grade(3,“C”,58));sort(finalGrade.begin(),finalGrade.end(),gradeCompare());for_each(finalGrade.begin(),finalGrade.end(),printScore); return 0;}
- 简单了解STL
- STL函数库的简单了解
- STL了解(初级)
- stl 初步了解
- STL学习 - queue了解
- C++STL基本了解
- 简单.STL
- 简单STL
- 了解STL库中的squeue
- 简单了解htmlparser
- jdk简单了解
- _EPROCESS结构简单了解!
- hadoop的简单了解
- xml的简单了解
- android 手机简单了解
- 网络知识------简单了解
- jquery的简单了解
- sql简单了解
- 工作学习报告--java基础(1)
- Leetcode192: Serialize and Deserialize Binary Tree
- Hibernate操作数据库的方式总结
- Android:仿微信开场切换界面
- ios开发——NSdata 与 NSString,Byte数组,UIImage 的相互转换
- 简单了解STL
- Android实际开发问题01------从图库读取图片
- 旧版IE,IE 11以下版本即将停止技术支持
- 采购单审核
- MongoDB 基本命令
- 【排序算法】之插入排序的实现
- Swift-封装购物车Model 数据模型
- 在Web应用中接入微信支付的流程之极简清晰版
- 2015下半年的总结