• C++ STL 习题


    Questions:

    BASE:
    1. which are wrong?
    int ia[ 7 ] = { 0, 1, 1, 2, 3, 5, 8 };
    (a) vector< vector< int > > ivec;
    (b) vector< int > ivec = { 0, 1, 1, 2, 3, 5, 8 };
    (c) vector< int > ivec( ia, ia+7 );
    (d) vector< string > svec = ivec;
    (e) vector< string > svec( 10, string( "null" ));

    2. Change code style to STL and compare their efficiency.

    // ***** C-style character string implementation *****
    int main()
    {
        
    int errors = 0;
        
    const char *pc = "a very long literal string";
        
    for ( int ix = 0; ix < 1000000++ix )
        
    {
            
    int len = strlen( pc );
            
    char *pc2 = new char[ len + 1 ];
            strcpy( pc2, pc );
            
    if ( strcmp( pc2, pc ))
                
    ++errors;
            delete [] pc2;
        }

        cout 
    << "C-style character strings: " << errors << " errors occurred.\n";
    }

    3.accept some ints from standard input, then sort them and output to standard output. Please use STL as far as possible.


    ADVANCED:
    1.Whate are the types of std::cin and std::cout? Write a console program ECHO that can be invoked by the following ways:
       
        ECHO [infile] [outfile]                             //[] indicates the infile is not necessary.
                                                            //there must be one and only one between -i and -s.
    The test case are :

        ECHO infile.txt outfile.txt                         //read from infile.txt and write to outfile.txt.
        ECHO infile.txt                                     //read from infile.txt and write to screen.
        ECHO                                                //read from standard input and write to standard output.
       
    //related:ofstream, ifstream, ostream, istream.

    2.Try your best to write a class to implement two-dimensional arrays like built-in type.
        int a[10][10];
        a[0][0] = 5;
       
        YourClass<int> yc(10,10);
        yc[0][0] = 5;

    3.write a program to process students' scores table(by using map/multimap).
        a.student infomation is like this:
                name, C++ basic score, C++ OOP score, C++ template score, C++ STL score, C++ MFC score
        b.sort by name.
        d.traverse infotable and generate the total score and average score to another table.
        e.output name, total score, average score and place for each student sorting by place.

    4. write a program to read words and calculate every word's frequency from a file. Output the 20 words and frequency with most high frequency.
    //
    //Note:
    //token - a set of characters bound on either side by spaces, the beginning of
    //the input string parameter or the end of the input String parameter.
    //word - a token that contains only letters (a-z or A-Z) and may end with a
    //single period or a single comma. A word must have at least one letter.
    //
    //  this is a word.
    //          //token(4) : this is a word.
    //          //words(4) : this is a word


    EXPLORATION:

    1. How and when is std::auto_ptr used? can std::auto_ptr be put on argument list? why?

    2. Compare vector with deque. When do we use each?

    3. What does the following code do? write a better method.

        vector<Type> c( 10000 );
        c.erase( c.begin() 
    + 10, c.end() );
        c.reserve( 
    10 );

    4.what does the std::remove() algorithm do? Does the algorithm remove what should be removed really? What's the difference in size and capacity between before and after? Write the right remove method.

    5.write a file_iterator,and 3 functors,to make the following code work:

    int main()
    {
      
    // count of file entries in the directory
      cout << "Total count: "
           
    << count_if(file_iterator(), file_iterator(0),
                       always_true
    <file_iterator::value_type>())
           
    << endl;

      
    // for_each() to display all entries
      for_each(file_iterator(), file_iterator(0), display_file_entry());

      
    // accumulate() to add up the size of all file entries
      cout << "Total: ";
      cout 
    << accumulate(file_iterator(), file_iterator(0), 0,
                         file_size())
           
    << "bytes." << endl;

      
    return 0;
    }

    the test case(the program name is mydir):

    c:\> mydir
    Total count: 3
    ...(filename)
    ...(filename)
    ...(filename)
    Total: 102487 bytes.


    FUN:
    1.you want to write a class template C that can be instantiated only on types that have a member function named Clone() that takes no parameters and returns a pointer to the same kind of object.

    //T must provide T* T::Clone() const
    template<typename T>
    class C
    {
      
    //
    }

    Note: It's obvious that if C writes code that just tries to invoke T::Clone() without parameters, then such code will fail to compile if there isn't a T::Clone() that can be called without parameters.

    2.try the following code in VC6 and VC.net 2003 seperately:

    #include <iostream>
    #include 
    <string>
    using namespace std;
    int main()
    {
        
    string str1("Hello, World!");
        
    string str2(str1);
        
    char* c = const_cast<char*> (str1.c_str()) ;
        
    *= 'h';
        cout
    <<str1<<endl;
        cout
    <<str2<<endl;
    }

    Why are the results different?

  • 相关阅读:
    中值定理
    poj 3984 迷宫问题 bfs
    android 处理网络状态——无网,2g,3g,wifi,ethernet,other
    POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)
    Android硬件加速
    Android的横竖屏切换
    滑雪_poj_1088(记忆化搜索).java
    Rank of Tetris(hdu1811拓扑排序+并查集)
    git在windows下clone、pull或者push内存溢出的解决办法
    数据库中DDL、DML、DCL和TCP概念
  • 原文地址:https://www.cnblogs.com/llf/p/404384.html
Copyright © 2020-2023  润新知