容器之分类与各种测试(三)——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; }

 运行效果

 没找到

 找到了

 这里有个需要注意的地方,如果一个模板类有自己的排序方法时,尽量使用自己的排序方法,这一定比通用的排序方式快。

 

posted @ 2019-12-09 17:00  C_hp  阅读(278)  评论(0编辑  收藏  举报