STL之 - list疯狂练习了一把

来源:互联网 发布:数控模拟软件 编辑:程序博客网 时间:2024/06/02 12:27

网上曰:我曾用STL几个商程序。它在很多方面减少了我的工作量,也排除了很多逻辑错误

最大的一个程序有大5000行。可能最惊人的事情就是它的速度。它入并理一个1-2兆的告文件花大20秒。我是在linux上用gcc2.7.2的,在运行在HP-UX机器上。它一共用了大50和函数象和很多容器,些容器的大小从小list到一个有14,000个元素的map都有。

一个程序中的函数象是于一个中,顶层的函数用低的函数象。我大量的使用STL算法for_each() ,find(),find_if(),count()count_if()我尽量减少使用程序内部的函数,而使用STL的算法

STL向于自的把代码组织成清晰的控制和支持模。通小心使用函数象并起有意的名字,我使它在我的件的控制流中流

所以,今天疯狂练习了STL的基本。


#include 
<iostream>
#include 
<string>
#include 
<list>
#include 
<vector>
#include 
<algorithm>

using namespace std;

/* for count_if */
class IsAToothbrush 
{
public:
    IsAToothbrush(string
& ToothbrushCode): 
      ValToothbrushCode(ToothbrushCode)
{}
      
      bool operator() (string
& SalesRecord) 
      
{
          
return SalesRecord.substr(04== ValToothbrushCode;
      }
  
private:
    string ValToothbrushCode;
}
;

/* for find_if */
class findListMember
{
public:
    findListMember(string
& findListString):
      valFindListString(findListString)
{}

      bool operator()(string
& strFindList) {
        
return strFindList.at(4> valFindListString.at(4);
      }


private:
    string valFindListString;
}
;

void print_it(string& string_to_printer)
{
    cout 
<< string_to_printer << endl;
}


int count_int;
int print_count(int inter_val)
{
    
if (inter_val == 2{
        count_int
++
    }


    
return count_int;
}


int main(int argc, char* argv[])
{
    list
<string> str_list;

    str_list.push_back(
"A1");
    str_list.push_back(
"A2");
    str_list.push_back(
"A3");
    str_list.push_front(
"A4");
    str_list.push_front(
"A5");

    list
<string>::iterator iter;

    
for (iter = str_list.begin(); iter != str_list.end(); iter++{
        cout 
<< *iter << endl;
        
    }


    cout 
<< endl;
    str_list.reverse();
    list
<string>::iterator iter_;

    
for (iter_ = str_list.begin(); iter_ != str_list.end(); iter_++{
        cout 
<< *iter_ << endl;
    }


    
if (!str_list.empty()) {
        cout 
<< "str_list is not empty..." << endl;
    }

/*
    str_list.clear();
    if (str_list.empty()) {
        cout << "str_list is empty..." << endl;
    }
*/


    
/* for_each test ... */
    for_each(str_list.begin(), str_list.end(), print_it);

    
/* count test... */
    list
<int> int_list;

    int_list.push_back(
0);
    int_list.push_back(
1);
    int_list.push_back(
2);
    int_list.push_back(
2);
    int_list.push_back(
3);
    int_list.push_back(
2);

    list
<int>::iterator int_list_inter;
    
int count_int_list;

    count_int_list 
= count(int_list.begin(), int_list.end(), 2);
    cout 
<< "The int list count_int_list: " << count_int_list << endl;

    
/* count_if test ... */
    list
<string> SalesRecords;
    
    SalesRecords.push_back(
"0001 Soap");
    SalesRecords.push_back(
"0002 Shampoo");
    SalesRecords.push_back(
"0003 Toothbrush");
    SalesRecords.push_back(
"0004 Toothpaste");
    SalesRecords.push_back(
"0003 Toothbrush");

    string ToothbrushCode(
"0003");
    
    
int NumberOfToothbrushes; 
    NumberOfToothbrushes 
= 
        count_if(SalesRecords.begin(), SalesRecords.end(), IsAToothbrush(ToothbrushCode));
    
    cout 
<< "There were " 
         
<< NumberOfToothbrushes 
         
<< " toothbrushes sold" << endl;
    

    
/* find test... */
    list
<string> str_list_find;

    str_list_find.push_back(
"list1");
    str_list_find.push_back(
"list2");
    str_list_find.push_back(
"list3");
    str_list_find.push_back(
"list4");
    str_list_find.push_back(
"list5");
    str_list_find.push_back(
"list6");
    
    list
<string>::iterator find_iter;

    find_iter 
= find(str_list_find.begin(), str_list_find.end(), "list5");

    
if (find_iter == str_list_find.end()) {
        cout 
<< "found not!!" << endl;
    }
 else {
        cout 
<< "found: " << *find_iter << endl;
    }


    
/* find_if test... */
    string strMember(
"list4");
    find_iter 
= find_if(str_list_find.begin(), str_list_find.end(), findListMember(strMember));
    
    
if (find_iter == str_list_find.end()) {
        cout 
<< "found not!!" << endl;
    }
 else {
        cout 
<< "found: " << *find_iter << endl;
    }

    
    
/* search test ... */
    list
<int> int_search_list1;
    list
<int> int_search_list2;
    list
<int> int_search_list3;

    int_search_list1.push_back(
1);
    int_search_list1.push_back(
1);

    int_search_list2.push_back(
0);
    int_search_list2.push_back(
2);
    int_search_list2.push_back(
1);
    int_search_list2.push_back(
1);

    int_search_list3.push_back(
0);
    int_search_list3.push_back(
2);
    int_search_list3.push_back(
1);
    int_search_list3.push_back(
1);

    list
<int>::iterator search_list_iter;
    search_list_iter 
= 
        search(int_search_list1.begin(), int_search_list1.end(), 
               int_search_list2.begin(), int_search_list2.end());

    
if (search_list_iter != int_search_list2.end()) {
        cout 
<< "We are found " << endl;
    }


    
/* sort test ...*/
    int_search_list2.sort();
    search_list_iter 
= int_search_list2.begin();

    
for (search_list_iter; search_list_iter != int_search_list2.end(); search_list_iter++{
        cout 
<< *search_list_iter << " - ";
    }

    cout 
<< endl;

    
/* insert() test ... */
    int_search_list3.insert(int_search_list3.begin(), 
-1);
    int_search_list3.insert(int_search_list3.end(), 
5);

    search_list_iter 
= int_search_list3.begin();


    
int arrary[2= 79 };
    int_search_list3.insert(int_search_list3.end(), 
&arrary[0], &arrary[1]);

    
for (search_list_iter; search_list_iter != int_search_list3.end(); search_list_iter++{
        cout 
<< *search_list_iter << " - ";
    }

    cout 
<< endl;

    
/* list construct */
    vector
<string> vector_string;
    
    vector_string.push_back(
"ABC");
    vector_string.push_back(
"DEF");
    vector_string.push_back(
"YUI");
    vector_string.push_back(
"MNP");
    vector_string.push_back(
"LOI");
    vector_string.push_back(
"QWE");

    list
<string> list_string(vector_string.begin(), vector_string.end());

    for_each(list_string.begin(), list_string.end(), print_it);
    
    
/* pop_back pop_front erase test... */
    list_string.pop_back();
    list_string.pop_front();
    list_string.erase(list_string.begin());
    
    cout 
<< "list_string size: " << list_string.size() << endl;
    for_each(list_string.begin(), list_string.end(), print_it);

    
/* remove test ...*/
    list
<string> remove_list;

    remove_list.push_back(
"OOOO");
    remove_list.push_back(
"PPPP");
    remove_list.push_back(
"MMMM");

    remove_list.remove(
"PPPP");
    for_each(remove_list.begin(), remove_list.end(), print_it);


    
return 0;
}