STL指示器

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <windows.h>
using namespace std;
/**********************************************************************
STL指示器
可以反复的对STL容器的内容进行访问,STL共定义了5种类型的指示器
1、输入指示器
2、输出指示器
3、前向指示器
4、双向指示器
5、随机访问指示器
**********************************************************************/

//输入指示器 --- 程序使用输入指示器只能读取容器的内容
int main(int argc, char* argv[])
{
 vector<int> intvector;
 //填充向量
 for(int i=0; i<10; i++)
  intvector.push_back(i*10);
 //显示向量内容
 vector<int>::iterator iter;//iter为指示器
 for(iter=intvector.begin(); iter!=intvector.end();iter++)
  cout<<*iter<<"  ";
 cout<<endl;

 return 0;
}


//输出指示器
int main()
{
 vector<int> intvector(5);
 //填充向量
 vector<int>::iterator iter = intvector.begin();
 *iter++ = 10;
 *iter++ = 15;
 *iter++ = 20;
 *iter++ = 25;
 *iter = 30;
 //显示向量内容
 vector<int>::iterator it = intvector.begin();
 while(it != intvector.end())
 {
  cout<<*it<<endl;
  ++it;
 }
 cout<<endl;
 return 0;
}

//前向指示器---既可读也可写
int main()
{
 vector<int> intvector(5);
 //初始化指示器
 vector<int>::iterator it = intvector.begin();
 vector<int>::iterator saveit = it;
 *it++ = 10;
 *it++ = 15;
 *it++ = 20;
 *it++ = 25;
 *it = 30;
 //显示向量内容
 while(saveit != intvector.end())
 {
  cout<<*saveit<<"  ";
  saveit++;
 }
 cout<<endl;

 return 0;
}


//爽向指示器
int main()
{
 vector<int> intvector(5);
 vector<int>::iterator it = intvector.begin();
 vector<int>::iterator saveit = it;
 //填充向量
 *it++ = 10;
 *it++ = 15;
 *it++ = 20;
 *it++ = 25;
 *it = 30;
 //显示向量内容
 while(saveit != intvector.end())
 {
  cout<<*saveit<<"  ";
  saveit++;
 }
 cout<<endl;
 //反向显示向量内容
 do{
  --saveit;
  cout<<*saveit<<"  ";
 }while(saveit != intvector.begin());

 return 0;
}

//随机指示器
int main()
{
 vector<int> intvector(5);
 vector<int>::iterator it = intvector.begin();
 vector<int>::iterator saveit = it;
 //填充向量
 *it++ = 10;
 *it++ = 15;
 *it++ = 20;
 *it++ = 25;
 *it = 30;
 //更改第三个元素的内容
 it -= 2;
 *it = 100;
 //显示向量内容
 while(saveit != intvector.end())
 {
  cout<<*saveit<<"  ";
  saveit++;
 }
 cout<<endl;
 //反向显示响亮的内容
 saveit -= 1;
 while(saveit >= intvector.begin())
 {
  cout<<*saveit<<"  ";
  saveit--;
 }
 cout<<endl;
 return 0;
}

//特殊用途的指示器
//输入流指示器---istream_iterator<char> (strm)
void show_val(int val)
{
 cout<<val<<"  ";
}

int main()
{
 vector<int> intvector;
 //填充向量
 for(int i=0;i<5;i++)
  intvector.push_back(*
  istream_iterator<int> (cin));
 //显示向量内容
 for_each(intvector.begin(),intvector.end(),show_val);
 cout<<endl;
 return 0;
}


//输出流指示器---ostream_iterator<char> (strm)
void show_val(string val)
{
 cout<<val<<"  ";
}

int main()
{
 vector<string> strvector1;
 vector<string> strvector2;
 //用值填充向量
 strvector1.push_back("Zebra");
 strvector1.push_back("Deer");
 strvector1.push_back("Fish");
 strvector1.push_back("Snake");
 strvector1.push_back("Bat");

 strvector2.push_back("Cat");
 strvector2.push_back("Bird");
 strvector2.push_back("Turtle");
 strvector2.push_back("Horse");
 strvector2.push_back("Cow");

 //显示向量内容
 for_each(strvector1.begin(),strvector1.end(),show_val);
 cout<<endl;
 for_each(strvector2.begin(),strvector2.end(),show_val);

 //向量排序
 merge(strvector1.begin(),strvector1.end(),strvector2.begin(),strvector2.end(),std::ostream_iterator<std::string> (std::cout));
 cout<<endl;
 return 0;
}

//指示器适配器
//反向指示器---rbegin()  rend()
void show_val(string val)
{
 cout<<val<<endl;
}

int main()
{
 vector<string> strvector;
 //填充向量
 strvector.push_back("Zebra");
 strvector.push_back("Deer");
 strvector.push_back("Fish");
 strvector.push_back("Snake");
 strvector.push_back("Bat");

 //显示向量内容
 for_each(strvector.begin(),strvector.end(),show_val);
 cout<<endl;
 //反向显示向量内容
 for_each(strvector.rbegin(),strvector.rend(),show_val);
 cout<<endl;
 return 0;
}

//插入指示器
void show_val(int val)
{
 cout<<val<<endl;
}

int main()
{
 vector<int> intvector(5);
 std::back_insert_iterator<vector<int> > it(intvector);
 *it++ = 23;
 *it++ = 34;
 *it++ = 45;
 *it++ = 56;
 *it = 67;
 //显示向量内容
 for_each(intvector.begin(),intvector.end(),show_val);
 cout<<endl;
 return 0;
}


//类模板
template <class T1,class T2,int num=10>
class mytemp{
private:
 T1 t1;
 T2 t2;
public:
 mytemp(T1 tt1,T2 tt2)
 {
  t1 = tt1 + num;
  t2 = tt2 + num;
 }
 void dispaly()
 {
  cout<<"T1 "<<t1<<"      T2 "<<t2<<endl;
 }
};

int main()
{
 int a = 123;
 int c = 1000;
 double b = 456.789;
 mytemp<int,double> mt1(a,b);
 mytemp<int,double,100> mt2(a,b);

 mt1.dispaly();
 mt2.dispaly();

 return 0;
}


template <class T>
class custom{
public:
 custom();
 void start();
};

template<class T>
custom<T>::custom()
{
}

template <class T>
void custom<T>::start()
{
 T op;
 op.output();
}
/////////////////////////////////////////////
class b{
public:
 void output()
 {
  cout<<"hello,this is class b"<<endl;
 }
};
//////////////////////////////////////////////
class a{
public:
 output()
 {
  cout<<"hello,this is class a"<<endl;
 }
};
int main()
{
 custom<b> b1;
 b1.start();
 custom<a> a1;
 a1.start();
 return 0;
}


template<class T>
class temp{
 int data;
public:
 temp(int n){
  data = n;
 }
 void dispaly();
};

template<class T>
void temp<T>::dispaly()
{
 cout<<"data :"<<data<<endl;
}

int main()
{
 temp<int> a(9);
 a.dispaly();
 return 0;
}


int main()
{
 ::MessageBox (NULL,TEXT("hello,this is function of API, MessageBox()"),TEXT("MssageBox"),MB_OK);
 return 0;
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页