您的位置:首页 > 其它

STL之 - list疯狂练习了一把

2008-01-22 19:21 330 查看
网上曰:我曾用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(0, 4) == 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] = ...{ 7, 9 };


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;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: