• STL的心得(3)---运用(控制台)


    很多网上介绍的都是关于STL在控制台的运用,我认为,这总适合与学习理论知识以及其实践,当真正用到项目中去的
    恐怕这就不适合了。我也老套一下。分为两种情况。
    1)控制台的运用
    2)用MFC写一个简单的画图程序(恐怕这个应该是大家更加注意的)

    OK,先说控制台:

    下面源代码,可以直接运行(VC6 Console)(关于其整个工程文件可以到www.confach.533.net去Download),如果你找不到,可以直接按上面的联系方式与我Mail,我会尽快给你发过去,大家一起学习)

    #ifdef _MSC_VER
    #endif

    #include "stdafx.h"
    #pragma warning(disable:4786)
    #pragma warning(disable:4514)
    #include <vector>
    #include <iostream>
    #include <deque>
    #include <list>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <string>
    #include <iosfwd>
    #include <iterator>

    using namespace std;

    class PrintInt
    {
    public:
     void operator()(int elem) const
     {
      std::cout< }
    };
    //define a class
    class StudentID
    {
    public:
     StudentID(int id=0)
     {
      value=id;
      std::cout<<"Assigning student id:"< }
     ~StudentID()
     {
      std::cout<<"Destructing ID:"< }
    private:
     int value;
    };
    class Student
    {
    public:
     Student(char *pName="noName",int ssID=0):id(ssID)
     {
      std::cout<<"Constructing student:"<  strncpy(name,pName,sizeof(name));
      name[sizeof(name)-1]=0;
      StudentID id(ssID);
     }
    private:
     char name[20];
     StudentID id;
    };
    void TestMMap()
    {
     typedef multimap IntStringMap;
     IntStringMap coll;
    // coll.insert(std::make_pair(5,"tagged"));
    // coll.insert(make_pair(2,"a"));
    // coll.insert(make_pair(1,"this"));
    // coll.insert(make_pair(4,"of"));
    // coll.insert(make_pair(6,"strings"));
    // coll.insert(make_pair(1,"is"));
    // coll.insert(make_pair(3,"multimap"));
    // 
     /* print all element values
     *- iterate over all elements
     *- element member second is the value
     */
     std::cout<<"========================================"<// IntStringMap::iterator pos;
    //  for (pos = coll.begin(); pos != coll.end(); ++pos)
    // {
    //  std::cout << pos->second <<"   ";
    // }
     std::cout << endl;
     
    }
    void TestSet()
    {
     typedef std::set >IntSet;
      IntSet set1;
     set1.insert(1);
     set1.insert(3);
     set1.insert(5);
     set1.insert(1);
     set1.insert(4);
     set1.insert(6);
     
     std::cout<<"========================================"< IntSet::const_iterator pos;
     for(pos=set1.begin();pos!=set1.end();++pos)
     {
      std::cout<<*pos<<"  "<< "  set"< }
    }
    void TestAlgorithm()
    {
     vector mVector;
     vector::iterator pos;


     mVector.push_back(1);
     mVector.push_back(2);
     mVector.push_back(5);
     mVector.push_back(76);
     mVector.push_back(4);

      std::cout<<"====================================="< for(pos=mVector.begin();pos!=mVector.end();++pos)
     {
      std::cout<<*pos< }

     pos=min_element(mVector.begin(),mVector.end());
     std::cout<<"min:"<<*pos< pos=max_element(mVector.begin(),mVector.end());
     std::cout<<"Max:"<<*pos< std::cout<<"===================================="< std::cout<<"        Sort                        "< std::cout<<"===================================="< std::sort(mVector.begin(),mVector.end());
     for(pos=mVector.begin();pos!=mVector.end();++pos)
     {
      std::cout<<*pos< }
     std::cout<<"===================================="< std::cout<<"         Reverse                       "< std::cout<<"===================================="< std::reverse(mVector.begin(),mVector.end());
     for(pos=mVector.begin();pos!=mVector.end();++pos)
     {
      std::cout<<*pos< }
     
    }
    void TestIteratorAdapter()
    {
     list coll1;
     
     //insert elements from 1 to 9 into the first collection
     for (int i=1; i<=9; ++i)
     {
      coll1.push_back(i);
     }
     
     // copy the elements of coll1 into coll2 by appending
     vector coll2;
     copy (coll1.begin(), coll1.end(), //source
            back_inserter(coll2)); //destination
     
     //copy the elements of coll1 into coll3 by inserting them  front
     // - reverses the order of the elements
     //Remarks:if use front_inserter,the container must provide push_front method
     deque coll3;
     copy (coll1.begin(), coll1.end(), //source
           front_inserter(coll3)); //destination
     
     //copy elements of coll1 into coll4
     
     // - only inserter that works for associative collections
     set coll4;
     copy (coll1.begin(), coll1.end(), //source
           inserter(coll4,coll4.begin())); //destination

     std::cout<<"=====================List=========="< list::iterator pos;
     for(pos=coll1.begin();pos!=coll1.end();++pos)
     {
      std::cout<<*pos< }
     std::cout<<"=====================Vector(List use back_insert)=========="< vector::iterator pos1;
     for(pos1=coll2.begin();pos1!=coll2.end();++pos1)
     {
      std::cout<<*pos1< }

     std::cout<<"=====================Deque(List use front_insert)=========="< deque::iterator pos2;
     for(pos2=coll3.begin();pos2!=coll3.end();++pos2)
     {
      std::cout<<*pos2< }
     std::cout<<"=====================Set(List use inserter)=========="< set::iterator pos3;
     for(pos3=coll4.begin();pos3!=coll4.end();++pos3)
     {
      std::cout<<*pos3< }

    }
    void TestStreamIterator()
    {
     vector coll;

     /*read all words from the standard input
     * - source: all strings until end-of-file (or error)
     * - destination: coll (inserting)
     */
     copy (istream_iterator(cin), //start of source
      istream_iterator(), //end of source
      back_inserter(coll)); //destination
     
     
     //sort elements
     sort (coll.begin(), coll.end());

     /*print all elements without duplicates
     * - source: coll
     * - destination: standard output (with newline between elements)
     */

     unique_copy (coll.begin(), coll.end(), //source
      ostream_iterator (cout, "\n"));
     //destination
    }

    template
    inline void PRINT_ELEMENTS (const T& coll, const char* optcstr="")
    {
    typename T::const_iterator pos;
    std::cout << optcstr<for (pos=coll.begin(); pos!=coll.end(); ++pos) {
    std::cout << *pos << ' '<}
    std::cout << std::endl;
    }

    //void main()
    //{
    //  const int size=100;
    //  int array[size];
    //  array[0]=0;
    //  array[1]=1;
    //  array[1000]=1000;
    //
    //  cout<// 
    //}
    typedef struct tagIntegerNode {
      int             iValue;
      tagIntegerNode *pNextIntegerNode;
    }INTEGERNODE;

    class A {
      public:
        // Made public to simplify tracing
        // Would normally be protected:
       static INTEGERNODE *pFirstIntegerNode;
    };

    // Static data members must be initialized at file scope, even
    // if private.
    INTEGERNODE *A::pFirstIntegerNode;

    class B:public A {
      public:
        B( void );
    };

    class C:public A {
      public:
        C( void );
    };

    B::B( void )
    {
      pFirstIntegerNode                   = new INTEGERNODE;
      pFirstIntegerNode->iValue           = 1;
      pFirstIntegerNode->pNextIntegerNode = NULL;
    };

    C::C( void )
    {
      pFirstIntegerNode->pNextIntegerNode                   = new INTEGERNODE;
      pFirstIntegerNode->pNextIntegerNode->iValue           = 2;
      pFirstIntegerNode->pNextIntegerNode->pNextIntegerNode = NULL;
    };

    //----------------------------------------------------
    //-----------------------------------------------------
    typedef list ListElement;
    typedef list OwningList;
    void OutputList(const ListElement& EntireListElement,int listNumber)
    {
     ostream_iterator out(cout," ");
     cout<<"List "< copy(EntireListElement.begin(),EntireListElement.end(),out);
     cout<

    }
    void TestOwningList()
    {
     OwningList ListOfListElements;
     for(int i=0;i<3;++i)
     {
      ListElement EntireListElement;
      for(int j=0;j<5;++j)
      {
       EntireListElement.push_back (i*4+j);
      }
      OutputList(EntireListElement,i+1);
      ListOfListElements.push_back(EntireListElement);
     }
     cout< OwningList::iterator it=ListOfListElements.begin();
     for(int j=1;it!=ListOfListElements.end();++it,++j)
     {
         const ListElement& EntireListElement1=*it;
      OutputList(EntireListElement1,j);
     }
     
    }
    typedef vector INTVECTOR;

    void TestVectorAttr1()
    {
     // Dynamically allocated vector begins with 0 elements.
      INTVECTOR theVector;

       // Add one element to the end of the vector, an int with the value 42.
       theVector.push_back(42) ;
      // Show statistics about vector.
        cout << "theVector's size is: " << theVector.size() << endl;
        cout << "theVector's maximum size is: " << theVector.max_size()
             << endl;
        cout << "theVector's capacity is: " << theVector.capacity() << endl;
        // Ensure there's room for at least 1000 elements.
        theVector.reserve(1000);
        cout << endl << "After reserving storage for 1000 elements:" << endl;
        cout << "theVector's size is: " << theVector.size() << endl;
        cout << "theVector's maximum size is: " << theVector.max_size()
             << endl;
        cout << "theVector's capacity is: " << theVector.capacity() << endl;

        // Ensure there's room for at least 2000 elements.
        theVector.resize(2000);
        cout << endl << "After resizing storage to 2000 elements:" << endl;
        cout << "theVector's size is: " << theVector.size() << endl;
        cout << "theVector's maximum size is: " << theVector.max_size()
             << endl;
        cout << "theVector's capacity is: " << theVector.capacity() << endl;

    }
    void TestVectorCreate()
    {
     cout<<"============================================="< cout<<"====================Test Vector============="< cout<<"============================================="< INTVECTOR c1;
     c1.push_back(1);
     c1.push_back(2);
     c1.push_back(3);
     c1.push_back(4);
     INTVECTOR::iterator it;
     cout<<"---Create a empty vector without any element"< for(it=c1.begin();it!=c1.end();++it)
     { 
      cout<<*it<<",";
     }
     cout< cout<<"--Create a copy vector"< INTVECTOR c2(c1);
        for(it=c2.begin();it!=c2.end();++it)
     { 
      cout<<*it<<",";
     }
     cout< cout<<"---Create a vector with n elements"< INTVECTOR c3(8);
     c3.assign(8,1);
     c3.push_back(10);
     c3.push_back(12);
     c3.push_back(14);
     c3.push_back(16);
     c3.push_back(18);


       for(it=c3.begin();it!=c3.end();++it)
     { 
      cout<<*it< }
       cout<<"---Create a vector with n copies of elements"<   INTVECTOR c4(5,10);
    for(it=c4.begin();it!=c4.end();++it)
     { 
      cout<<*it< }

    int nArr[]={1,2,3,4,5};
    INTVECTOR c5(nArr,nArr+sizeof(nArr)/sizeof(int));
    cout<<"---Create a vector with a array"<for(it=c5.begin();it!=c5.end();++it)
     { 
      cout<<*it< }
    cout<<"--Test End----------"<}

    void TestVectorIterator()
    {
     vector ages(15) ;
     ages.push_back(15);
     vector::const_iterator p=ages.begin();
     for(int i=0;i<10;i++)
     {
      ages.push_back(i);
     }
     cout<<"===========Test Iterator=============="< //p=ages.begin();
     cout<<"The first age is:"<<*p< cout<<"===============End===================="< 
    }
    class Shape
    {
    public:
     virtual void Draw()
     {
      cout<<"Draw it in Shape class"< }
     virtual void GetSize()=0;
     
    };
    class Rectangle:public Shape
    {
    public :
     virtual void Draw()
     {
      cout<<"Draw it in Rectangle class"< }
       void GetSize()
       
       {
       cout<<"Get size in Rectangle class"<  }
      
    };
    void TestPointer()
    {
     int i=100;
     char c='a';
     float f=i;
     double d=f;
     bool b=true;
     
     int *pI=&i;
     int **ppI=&pI;
     cout<<"Address of i         :0x"<<&i< printf("Address of c         :0x%p\n",&c);
     cout<<"Address of f          :0x"<<&f< cout<<"Address of d          :0x"<<&d<    cout<<"Address of b          :0x"<<&b<

     cout<<"Address of pI          :0x"<<&pI< cout<<"Value of pI          :0x"< cout<<"Address of ppI          :0x"<<&ppI< cout<<"Value of ppI          :0x"<}

    void main()
    {
     TestPointer();
     return;
     Shape *pShape=NULL;
     Rectangle a;
     pShape=&a;
     pShape->Draw();
     pShape->GetSize();
     return;
     TestVectorCreate();
     TestVectorAttr1();
     TestVectorIterator();
        return;
     TestOwningList();
     B instanceB;
     C instanceC;
     cout<iValue < cout<pNextIntegerNode->iValue< 
     short int iArray[1000];
     for(int i1=0;i1<1000;i1++)
     {
      iArray[i1]=i1;
     }
     Student s("confach zhang",99471136);

     vectorcol1;
     dequedeq1;
     listlist1;
      
        std::cout<<"=================================================="< std::cout<<"   index      value    Type"< std::cout<<"=================================================="< for(int i=0;i<100;i++)
     {   if(i%2==0)
      col1.push_back(i);
     }
     
     for( i=0;i {
     std::cout< }
     std::cout<<"===============Object Function=================="<     for_each(col1.begin(),col1.end(),PrintInt());
     std::cout<<"=================================================="< std::cout<<"   index      value    Type"< std::cout<<"=================================================="< for(i=0;i<100;i++)
     { 
      if(i%2==0)
      {
      deq1.push_front(i);
      }
      else
      {
       deq1.push_back(i);
      }
     }

     for(i=0;i {
      std::cout< }

        std::cout<<"=================================================="< std::cout<<"   index      value    Type"< std::cout<<"=================================================="< for(char c='a';c<='z';c++)
     {
      list1.push_back(c);
     }
       while(!list1.empty())
       {
        std::cout<    list1.pop_front();
       }

        std::cout<<"=================================================="< std::cout<<"   index      value    Type"< std::cout<<"=================================================="<    for( c='a';c<='z';c++)
     {
      list1.push_front(c);
     }
     std::cout<<"==============User Define function=========================="< PRINT_ELEMENTS(list1,"confach");
        list::iterator pos;
       //list::const_iterator//for read_only
       //list::iterator//for read/write
       for(pos=list1.begin();pos!=list1.end();++pos)
     //Caution:
    // Note that the preincrement operator (prefix ++) is used here. This is because it might have better
    //performance than the postincrement operator. The latter involves a temporary object because it
    //must return the old position of the iterator. For this reason, it generally is best to prefer ++pos
    //over pos++. Thus, you should avoid the following version:
    //for (pos = coll.begin(); pos != coll.end(); pos++) {
    //                                            ^^^^^ // OK, but slower
    //...
    //}
    //For this reason, I recommend using the preincrement and pre-decrement operators in general.
       {
        std::cout<   }

       TestSet();
       TestMMap();
       TestAlgorithm();

       std::cout<}

  • 相关阅读:
    多进程或多线程实现并发
    linux服务器配置pyspider出现Could not run curl-config 的解决方式
    js的逆向解析
    修改linux终端命令行各字体颜色
    利用Centos服务器来搭建自己的splash,不再被安装的各种环境繁琐而担忧
    配置 Docker 加速器:适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1
    一分30秒 kali 开机显示 a start job is running for dev-disk 处理
    虚拟机Ubuntu16.04无法进入图形界面 The system is running in low-graphics mode
    vmware ubuntu硬盘空间不够用,空间扩展
    pip错误-failed to create process/fatal error in launcher
  • 原文地址:https://www.cnblogs.com/confach/p/112101.html
Copyright © 2020-2023  润新知