📄 stl_utility测试代码.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 + -