⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stl_utility测试代码.cpp

📁 STL的测试代码
💻 CPP
字号:
// STL测试代码.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<utility>
#include<assert.h>
#include<string.h>
#include<iterator>
#include<deque>
#include<strstream>
using namespace std;

typedef char * PtrIt;
void take_ran_tag(random_access_iterator_tag)
{}

void test_prop()
{ 
	random_access_iterator_tag  *ran_tag=(random_access_iterator_tag *)0;
	bidirectional_iterator_tag *bid_tag=(random_access_iterator_tag *)0;
	forward_iterator_tag *fwd_tag=(bidirectional_iterator_tag *)0;
	input_iterator_tag *in_tag=(input_iterator_tag *)0;
	output_iterator_tag *p_out_tag=0;


//////////////////////////////////////////////////////////////
/*封装了一个实数的迭代器  */
    typedef iterator<input_iterator_tag,float,short,float *,float &> Iter;
	float f1;
	Iter::iterator_category *it_tag=(input_iterator_tag *)0;
	Iter::value_type *it_val=(float *)0;
	Iter::difference_type *it_dist=(short *)0;
	Iter::pointer it_ptr=(float *)0;
	Iter::reference it_ref=f1;

	typedef iterator_traits<Iter> Traits;
	Traits::iterator_category *tr_tag=(input_iterator_tag *)0;
	Traits::value_type *tr_val=(float *)0;
	Traits::distance_type *tr_dist=(short *)0;
	Traits::pointer tr_ptr=(float *)0;
	Traits::reference tr_ref=f1;
/////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////
   /*这一段代码,封装了一个可以自由移动的字符数组的指针 */
	typedef char * PtrIt;
	typedef iterator_traits<PtrIt> Ptraits;
	char ch;
	take_ran_tag(Ptraits::iterator_category());
	Ptraits::value_type *ptr_val=(char *)0;
	Ptraits::distance_type *ptr_dist=(ptrdiff_t *)0;
	Ptraits::pointer ptr_ptr=(char *)0;
	Ptraits::reference ptr_ref=ch;
////////////////////////////////////////////////////////////////
	const char *pc="abcdefg";
	advance(pc,4);
	assert(*pc=='e');
    advance(pc,-1);
    assert(*pc=='d');
	assert(distance(pc,pc+3)==3);
}

  
typedef reverse_iterator<PtrIt>  RevIt;
   class MyrevIt:public RevIt
   {
	   MyrevIt(RevIt::iterator_type p)
		   :RevIt(p){}
	   RevIt::iterator_type get_current()const 
	   {
		   return (current);
	   }
   };

   void test_revit()
   {
	   char *pc=(char *)"abcdef"+3;
	   PtrIt pcit(pc);
	   RevIt::iterator_type *p_iter=(PtrIt *)0;
	   RevIt rit0,rit(pcit);

	   assert(rit.base()==pcit);
	   assert(*rit=='c');
	   assert(*++rit=='b');
	   assert(*rit++=='b'&& *rit=='a');
	   assert(*--rit=='b');
	   assert(*rit--=='b' &&*rit=='c');
	   assert(*(rit+=2)=='a');
	   assert(*(rit-=2)=='c');
	   assert((*(rit+2)=='a')&&(*rit=='c'));
	   assert(rit[2]=='a');
	   assert(rit==rit);
	   
//	   MyrevIt myrit(pc);
//	   assert(myrit.get_current()==pcit);
   }

typedef pair<int, char> Pair_ic;
Pair_ic  p0;

////////////////////////////////////////////
class Int{
public:
	Int(int v):
	  value(v){}
	  bool operator==(Int x) const
	  {
		  return( value==x.value);
	  }
	  bool operator<(Int x)const
	  {
		  return (value<x.value);
	  }
private:
	int value;
};
/*通过对operator==(), operator<() 函数的定义,再加上
using namespace std::rel_ops;
就可以得到对该类定义的各个运算符了 */
//////////////////////////////////////////////////





int _tmain(int argc, _TCHAR* argv[])
{
	Pair_ic p1=p0,p2(3,'a');
	assert(p1.first==0);
	assert(p1.second==0);
	assert(p2.first==3);
	assert(p2.second=='a');
	assert(p2==make_pair((Pair_ic::first_type)3,(Pair_ic::second_type)'a'));
	assert(p2<=make_pair((Pair_ic::first_type)4,(Pair_ic::second_type)'a'));
	assert(p2<=make_pair((Pair_ic::first_type)3,(Pair_ic::second_type)'b'));
	assert(p1!=p2);
	assert(p2>p1);

	using namespace std::rel_ops;
//	using std::rel_ops::operator <=;
	Int a(2),b(3);
	assert(a==a);
	assert(a<b);
	assert(a!=b);
	assert(b>a);
	assert(a<=b);
	assert(b>=a);
	
//////////////////////////////////////////////////
/* test for iterator           */
/*                             */
/*                             */

	test_prop();
    test_revit();

	cout<<"success testing <utility>"<<endl;

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -