容器之分类与各种测试(三)——list部分用法
list是一个双向链表
例程
#include<stdexcept> #include<memory.h> #include<string> #include<cstdlib>//abort() #include<stdio.h> #include<algorithm>//find() #include<iostream> #include<ctime> #include<list> using namespace std; long get_a_target_long() { long target = 0; cout<<"target(0~"<<RAND_MAX<<"):"; cin>>target; return target; } string get_a_target_string() { long target = 0; char buf[10]; cout<<"target(0~"<<RAND_MAX<<"):"; cin>>target; snprintf(buf, 10, "%d", target); return string(buf); } int compareLongs(const void* a, const void* b) { return (*(long*)a - *(long*)b); } int compareStrings(const void *a, const void *b) { if(*(string*)a > *(string*)b) return 1; else if(*(string*)a < *(string*)b) return -1; else return 0; } void test_list(long& value) { cout << "\ntest_list().......... \n"; list<string> c; //链表中存储着string类型(字符串)的数据 char buf[10]; clock_t timeStart = clock(); for(long i=0; i< value; ++i) { try//由于例程中的value使用一百万,所以为了防止内存不足出错,这里使用了try catch来尝试捕捉并处理错误,关于try和catch得用法可以查看这个博客 { snprintf(buf, 10, "%d", rand()); c.push_back(string(buf)); } catch(exception& p) { cout << "i=" << i << " " << p.what() << endl; abort(); } } cout << "milli-seconds : " << (clock()-timeStart) << endl; cout << "list.size()= " << c.size() << endl; //list含有的元素个数 cout << "list.max_size()= " << c.max_size() << endl; //这里的max_size函数在不同计算机上的表现不同,具体大小和预装内存大小正相关 cout << "list.front()= " << c.front() << endl; //链表头 cout << "list.back()= " << c.back() << endl; //链表尾 string target = get_a_target_string(); timeStart = clock(); auto pItem = ::find(c.begin(), c.end(), target); //::的意思是让编译器在stdio.h/iostream中寻找find方法,而不用现在当前代码中寻找 cout << "std::find(), milli-seconds : " << (clock()-timeStart) << endl; if (pItem != c.end()) cout << "found, " << *pItem << endl; else cout << "not found! " << endl; timeStart = clock(); c.sort(); cout << "c.sort(), milli-seconds : " << (clock()-timeStart) << endl; } int main() { long int value;
cout<<"how many elements:";
cin>>value; test_list(value); return 0; }
运行效果
没找到
找到了
这里有个需要注意的地方,如果一个模板类有自己的排序方法时,尽量使用自己的排序方法,这一定比通用的排序方式快。
不积小流无以成江河