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(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;
}
- STL之 - list疯狂练习了一把
- STL之 - 排序函数疯狂练习了一把
- 090825:先练习了一把
- STL之List的一些编程练习
- STL list的练习
- STL 之set 练习
- STL之vector练习
- STL学习之list
- STL之list模板
- STL之list学习
- stl之list使用
- STL之List
- STL容器之list
- STL容器之list
- STL之count、list
- sgi stl 之list
- STL之list基础
- STL之list
- OpenProcessToken函数 何时会失败
- firebug螢火蟲
- 源码 获得系统进程快照以及对应的用户名
- TTL集成逻辑门
- 在Fedora 7下安装NFS过程
- STL之 - list疯狂练习了一把
- 转:谨以此文献给才毕业2--5年的朋友
- 哈希查找因何快?我们使用它需要付出什么代价
- C#日期用户控件代码
- MTK网络通信例程
- 如何先安装XP再安装2000
- 开始在这里扎根钻研
- GSM短消息的pdu和test模式的区别是什么?
- hash是如何处理冲突的?[转]