学习Essential C++的例子

来源:互联网 发布:鲷鱼烧机器 淘宝 编辑:程序博客网 时间:2024/05/17 17:18

#include <vector>
#include <string>
#include <iostream>
//#include <cstdlib>
using namespace std;

int main()
{
 int elem_vals[18]={1,2,3,3,4,7,2,5,12,3,6,10,4,9,16,5,12,22};
 vector<int> fibonacci(elem_vals,elem_vals+3);
 vector<int> lucas(elem_vals+3,elem_vals+6);
 vector<int> pell(elem_vals+6,elem_vals+9);
 vector<int> trigangular(elem_vals+9,elem_vals+12);
 vector<int> square(elem_vals+12,elem_vals+15);
 vector<int> pentagonal(elem_vals+15,elem_vals+18);
 vector<int> *seq_addr[6]={&fibonacci,&lucas,&pell,&trigangular,&square,&pentagonal};
 srand(6);
 int seq_index=rand()%6;
 vector<int> *curvector=seq_addr[seq_index];
 return 0;
}


//////////////////////////////////////////////////////////

#include <iostream>
#include <vector>
#include <conio.h>
#include <fstream>
using namespace std;
void display( vector<int>);
void swap( int&, int& );
void bubble_sort( vector<int>&,ofstream*);

int main()
{
    int ia[8]={8,34,3,13,1,21,5,2};
    vector<int> vec(ia,ia+8 );
 ofstream ofil("data.txt");
    cout<<"vector before sort:/t";
    display( vec );
   
    cout<<" vector after sorted:/t";
    bubble_sort( vec ,&ofil);
    display( vec );
    getch();
    return 0;
}


void display( vector<int> vec )
{
 for (int ix=0;ix<vec.size();++ix )
  cout<<vec[ix]<<' ';
 cout<<endl;
}

void swap( int &val1, int &val2 )
{
 int temp;
 temp = val1;
 val1 = val2;
 val2 = temp;
}


void bubble_sort( vector<int> &vec,ofstream *ofil=0)
{
 for (int ix=0;ix<vec.size();++ix)
  for (int jx=ix+1;jx<vec.size();++jx)
   if (vec[ix] > vec[jx])
   {
    *ofil<<"about to call swap ix="<<ix<<"jx="<<jx<<"/tswapping"
     <<vec[ix]<<"with"<<vec[jx]<<endl;
                swap( vec[ix], vec[jx]);
   }
}


////////////////////////


#include <iostream>
#include <vector>
#include <conio.h>
#include <fstream>
using namespace std;

void display( vector<int> vec )
{
 for (int ix=0;ix<vec.size();++ix )
  cout<<vec[ix]<<' ';
 cout<<endl;
}

void swap( int &val1, int &val2 )
{
 int temp;
 temp = val1;
 val1 = val2;
 val2 = temp;
}


void bubble_sort( vector<int> &vec,ostream &ofil=cout)
{
 for (int ix=0;ix<vec.size();++ix)
  for (int jx=ix+1;jx<vec.size();++jx)
   if (vec[ix] > vec[jx])
   {
    ofil<<"about to call swap ix="<<ix<<"jx="<<jx<<"/tswapping"
     <<vec[ix]<<"with"<<vec[jx]<<endl;
                swap( vec[ix], vec[jx]);
   }
}


int main()
{
    int ia[8]={8,34,3,13,1,21,5,2};
    vector<int> vec(ia,ia+8 );
 ofstream ofil("data.txt");
    cout<<"vector before sort:/t";
    display( vec );
   
    cout<<" vector after sorted:/t";
  //  bubble_sort( vec ); //使用默认值
 bubble_sort( vec ,ofil); //使用默认值
    display( vec );
    getch();
    return 0;
}

//////////////////////

#include <stdio.h>
int a[20];                 file://定义一个数组,该数组的用来存放6个数列的数。
int i;                     file://定义全局变量 i;方便6个函数用做循环。
int w,e;                   file://定义全局变量 w e,用来记录做对的次数和做错的次数。
int l,k,j,h,q,f;           file://定义全局变量l k j h q f,分别记录没个数列使用的次数。
main()
{   int a,b;
    welcome();            file://欢迎界面。
    system("cls");        file://清屏。
    do                          
    {srand((unsigned)time(NULL));     file://添加新的种子,以便rand()可以随机取出不同的值。
    a=rand()%6;                       file://随机取得一个0--5之间的数。
    switch(a)                         file://随机选择数列。
    {
    case 0:fib();break;              
    case 1:luc();break;
    case 2:pel();break;
    case 3:tri();break;
    case 4:squ();break;
    case 5:pen();break;
    } gameover();                       file://使游戏结束的提示。
    }  while(getch()!=' ');              file://一但按下空格,就推出循环。
    printf("Fibonacci的个数:%d/n",l);    file://打印 Fibonacci的个数。
    printf("Lucas的个数:%d/n",k);        file://打印 Lucas的个数。
    printf("Pell的个数:%d/n",j);         file://打印 Pell的个数。
    printf("Triangular的个数:%d/n",h);     file://打印 Triangular的个数。
    printf("Square的个数:%d/n",q);        file://打印 Square的个数。
    printf("Pentagonal的个数:%d/n",f);       file://打印 Pentagonal的个数。
    printf("一共做对的个数:%d/n",w);           // 一共做对的个数。  
    getch();
}
int sj()                                     file://此函数用来随机选取一个1到10的整数数。
{   int n1;
    srand((unsigned)time(NULL));
    n1=abs(rand()%10)+1;
    return n1;
}
/* Fibonacci数列*/ 
/*首先给这个数列的第一个和第二个树加上特定的值,然后根据数列的算法把所有的值全部添加到数组a[]中*/
fib()                                        
{   a[0]=1; a[1]=1;                          file://列的第一个和第二个数加上特定的值1。
     for(i=0;i<20;i++)                      
    {a[i+2]=a[i+1]+a[i];  }                   file://该数列的算法。
    printf3(); l++;                               file://随机打印该数列的3个数,记录次数。
}
/* Lucas数列*/ 
/*首先给这个数列的第一个和第二个树加上特定的值,然后根据数列的算法把所有的值全部添加到数组a[]中*/
luc()
{    a[0]=1; a[1]=3;                          file://列的第一个和第二个数加上特定的值1和3。
     for(i=0;i<20;i++)
    {a[i+2]=a[i+1]+a[i]; }                     file://该数列的算法。
    printf3(); k++;                          file://随机打印该数列的3个数, 记录次数。
     }
/* Pell数列*/ 
/*首先给这个数列的第一个和第二个树加上特定的值,然后根据数列的算法把所有的值全部添加到数组a[]中*/
pel()
{   
     a[0]=1; a[1]=2;                        file://列的第一个和第二个数加上特定的值1和2。
     for(i=1;i<20;i++)
    {a[i+2]=2*a[i+1]+a[i]; }                 file://该数列的算法。 
     printf3();j++;                         file://随机打印该数列的3个数,记录次数。

/* Triangular数列*/ 
/*首先给这个数列的第一个和第二个树加上特定的值,然后根据数列的算法把所有的值全部添加到数组a[]中*/
tri()
{   
     a[0]=1;                          file://列的第一个数加上特定的值1。
     for(i=0;i<20;i++)               
    {a[i+1]=a[i]+i+2; }                     file://该数列的算法。
      printf3();h++;                      file://随机打印该数列的3个数,记录次数。
}
/* Square数列*/ 
/*首先给这个数列的第一个和第二个树加上特定的值,然后根据数列的算法把所有的值全部添加到数组a[]中*/
squ()
{  
    for(i=0;i<20;i++)
    {a[i]=(i+1)*(i+1); }                   file://该数列的算法。
     printf3();q++;                          file://随机打印该数列的3个数,记录次数。
     }
/*Pentagonal数列*/ 
/*首先给这个数列的第一个和第二个树加上特定的值,然后根据数列的算法把所有的值全部添加到数组a[]中*/
pen()
{   
     for(i=0;i<20;i++)
     {a[i]=((i+1)*(3*i+2))/2; }             file://该数列的算法。
      printf3();f++;                           file://随机打印该数列的3个数,记录次数。
 }          
printf3()                           file://随机打印函数
{
     int b,c;                       
     b=sj();                       file://随机取得的数。
     printf("欢迎使用猜数字游戏/n");
     printf("%d  %d  %d  答案:%d/n",*(a+b),*(a+(b+1)),*(a+(b+2)),*(a+(b+3)));
     printf("请您输出第4个数!谢谢/n");
     scanf("%d",&c);                  file://判断游戏者是否做对游戏。
     if(c==*(a+(b+3)))                file://如果做对就记录下次数
     {printf("恭喜您答对了/n"); w++;}
     else                             file://否则 记录错的次数。
     {printf("好笨哦!/n");e++;}
     getch();
     system("cls");
}
welcome()                              file://欢迎界面
{       
         printf("欢迎进入猜数字游戏/n");
         printf("本游戏规则如下:/n");
         printf("在游戏开始后,系统将自动输出3个数字/n");
         printf("请您根据这3个数的运算规则输入第4个数,/n");
         printf("在每次游戏结束后可按空格退出。/n");
         printf("按任意键进入游戏/n");
         getch();
}
gameover()                               file://提示。
{
        printf("退出请按空格,继续请按其他键/n");
}
///////////////////////////////////////////////////////////////////
/*将pentagonal求值函数分为两个,其中之一为inline,用来检验合法性,合理且未被计算过,便调用第二个函数,执行求值工作*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;

void pentagonal_num(vector<int> &vec, int pos);
void display(const vector<int> &vec);
inline bool is_size_ok(vector<int> &vec,int size);

void main()
{
vector<int> pent;

if (is_size_ok(pent,0))
display(pent);

if (is_size_ok(pent,6))
display(pent);

if (is_size_ok(pent,18))
display(pent);

if (is_size_ok(pent,72))
display(pent);
}

bool is_size_ok(vector<int> &vec, int size)
{
 const int max_size=64;
 if (size<=0||size>max_size)
 {
  cout<<"requested size is not supported:"<<size<<endl;
  return false;
 }
 
 if (vec.size()<size)
  pentagonal_num(vec, size);
 return true;
}

void pentagonal_num(vector<int> &vec, int pos)
{
 for (int ix=vec.size()+1; ix<=pos; ++ix)
 {vec.push_back((ix * (3*ix-1))/2);}
}

void display(const vector<int> &vec)
{
 for (int ix=0; ix<vec.size(); ++ix)
  cout<<vec[ix]<<' ';
 cout<<endl;
}


/////////////////////////////////////////////////////////
#pragma   warning   (disable:4786)  
#include   <iostream>  
#include   <vector>  
#include   <string>  
using   namespace   std;  

template   <typename   elemtype>  
inline   elemtype*   beginme(vector<elemtype>   &vec)  
{  
 return   vec.empty()   ?   0   :   &vec[0]   ;  
}  

template   <typename   elemtype>  
inline   elemtype*   endme(vector<elemtype>   &vec)  
{  
 return   vec.empty()   ?   0   :   &vec[vec.size()]   ;  
}  

template   <typename   elemtype>  
elemtype   *find(   elemtype   *first,   elemtype   *last,   elemtype   &value   )  
{  
 if(   !   first   ||   !   last   )  
  return   0;  
   
 for(   ;   first   !=   last;   first++   )  
  if(   *first   ==   value   )  
   return   first;  
  
  return   0;  
}  

int   main()  
{  
 int   ia[8]   =   {   1,1,2,3,4,5,13,21   };  
 vector<int>veci(   ia,ia+8   );  
 double   da[6]   =   {   1.5,2.0,2.5,3.0,3.5,4.0   };  
 vector<double>   vecd(   da,da+6   );  
 string   sa[4]   =   {   "pooh","piglet","eeyore","tigger"   };  
 vector<string>   vecs(   sa,sa+4   );  
   
 int   *pi   =   find(   beginme(veci),endme(veci),veci[3]   );  
 double   *pd   =   find(   beginme(vecd),endme(vecd),vecd[3]   );  
 string   *ps   =   find(   beginme(vecs),endme(vecs),vecs[3]   );  
   
 cout <<   "The   int   element   is   :   "   <<   *pi   <<   '/n'  
  <<   "The   double   element   is   :   "   <<   *pd   <<   '/n'  
  <<   "The   string   element   is   :   "   <<   *ps   <<   '/n'   ;  
   
 return   0;  
  }

 

 

原创粉丝点击