首页 > 代码库 > STL之list测试
STL之list测试
STL中list是一个双向链表,可高效的进行插入删除元素,list不支持随机访问,所以没有at(pos) and operator[];
下面是测试代码:
// ListTest.cpp : 定义控制台应用程序的入口点。///*时间:2014年11月24日 16:42:41目的:测试STL中list的基本使用方法。*/#include "stdafx.h"#include <iostream>#include <list>using namespace std;//全局变量list<int> g_list1;list<int> g_list2;//初始化全局变量 listvoid InitList(){ //在链表结尾插入 g_list1.push_back(11); g_list1.push_back(12); g_list1.push_back(13); //在链表表头插入 g_list2.push_front(14); g_list2.push_front(15); g_list2.push_front(16);}//输出一个链表void ShowList(list<int>& listTemp){ //返回链表中元素的个数; cout<<"元素个数为:"<<listTemp.size()<<endl; list<int>::iterator it = listTemp.begin();//迭代器相当于一个指针。 for ( it = listTemp.begin(); it != listTemp.end();++it) { cout<<*it<<' '; } cout<<endl;}//测试构造函数void construct_test1(){ cout<<"无参数构造函数"<<endl; list<int> listTest; //无参数构造函数 ShowList(listTest);}void construct_test2(){ cout<<"构造一个含有5个值为默认的0的链表"<<endl; list<int> listTest(5); //长度为5 默认值为0的链表 ShowList(listTest);}//构造一个含有5个值为8的链表void construct_test3(){ cout<<"构造一个含有5个值为8的链表"<<endl; list<int> listTest(5,8);//元素个数为5,值为8 ShowList(listTest);}// 构造函数,建一个g_list1的copy链表void construct_test4(){ cout<<"构造函数,建一个g_list1的copy链表"<<endl; list<int> listTest(g_list1); ShowList(listTest);}//构造函数,listTest含g_list2一个区域的元素[_First, _Last)void construct_test5(){ cout<<"构造函数,listTest含g_list2一个区域的元素[_First, _Last)"<<endl; list<int> listTest(g_list2.begin(),g_list2.end()); ShowList(listTest);}//assign 重新分配值;有两个重载函数void assign_test(){ cout<<endl<<"assign Test:"<<endl; list<int> listTest(5,1); ShowList(listTest); // void assign ( size_type n, const T& u );第一个重载函数 listTest.assign(4,3); ShowList(listTest); // void assign(InputIterator first, InputIterator end);第二个重载函数 listTest.assign(++g_list1.begin(),g_list1.end()); ShowList(listTest);}//测试 operator=void operator_equal_test(){ cout<<endl<<"测试operator="<<endl; g_list1 = g_list2; ShowList(g_list2); g_list2.clear(); //仍然输出,说明是深拷贝 ShowList(g_list1);}//测试front 返回第一个元素的引用void front_test(){ cout<<endl<<"测试front 返回引用:"<<endl; cout<<g_list1.front()<<endl;}//测试back 返回最后一个元素的引用,查看源代码:back有普通的函数还有一个const的函数* reference back() { // return last element of mutable sequence return (*(--end())); } const_reference back() const { // return last element of nonmutable sequence return (*(--end())); }*/void back_test(){ cout<<endl<<"测试back 返回最后一个元素的引用"<<endl; cout<<g_list1.back()<<endl; cout<<g_list2.back()<<endl; list<int> const listTemp(4,5); cout<<listTemp.back()<<endl; //可以单步调试,这里进入的是 const函数,因为listTemp是const类型的}//begin返回第一个元素的指针 begin也是有两个函数void begin_test(){ list<int>::iterator it1 = g_list1.begin(); cout<<*it1++<<endl; *it1 = 99; cout<<*it1<<endl; list<int>::const_iterator it2 = g_list1.begin(); cout<<*++it2<<endl; //*it2 = 88;//ERROR *it2 为const 不可修改,说明constr_iterator 中 const修饰的是 *it2; list<int> const listTemp(3,888); list<int>::const_iterator it3 = listTemp.begin();//进入的是begin的const函数 cout<<*it3<<endl;}//end()返回最后一个元素的下一位置的指针void end_test(){ list<int>::iterator it1 = g_list1.end();//注意是最后一个元素的下一位置的指针 //cout<<*it1<<endl;//程序终止 cout<<*--it1<<endl; //cout<<*++it1<<endl;//求end()的再下一个元素的值也是错误的 说明STL当中 list不是循环链表 g_list1.clear(); it1 = g_list1.begin(); list<int>::iterator it2 = g_list1.end(); if (it1 == it2) { cout<<"Yes!!"<<endl; }}//rbegin()回传指向最后一个元素的反向 iteratorvoid rbegin_test(){ list<int>::reverse_iterator it = g_list1.rbegin(); for (; it != g_list1.rend(); ++it) { cout << *it << ' '; } cout << endl;}//返回第一个元素的前一个我位置的指针void rend_test(){ list<int>::reverse_iterator it = g_list1.rend(); --it; cout<<*it<<endl;}//删除链表尾的元素void pop_back_test(){ g_list1.pop_back(); ShowList(g_list1);}//删除链表表头的元素void pop_front_test(){ g_list2.pop_front(); ShowList(g_list2);}//删除所有元素void clear_test(){ ShowList(g_list1); g_list1.clear(); ShowList(g_list1);}//删除一个元素或者一个区域的元素(两个重载函数)
void earse_test(){ ShowList(g_list1); g_list1.erase(g_list1.begin()); ShowList(g_list1); cout<<endl; ShowList(g_list2); g_list2.erase(++g_list2.begin(),g_list2.end()); ShowList(g_list2);}//删除链表中匹配值的元素(匹配元素全部删除)void remove_test(){ ShowList(g_list1); g_list1.push_back(1); g_list1.push_back(1); ShowList(g_list1); g_list1.remove(1); //两个1都会被删除 ShowList(g_list1); g_list1.remove(13); ShowList(g_list1);}bool myFun(const int& value) { return (value < 12);}//remove_if()删除条件满足的元素(会遍历一次链表)void remove_if_test(){ ShowList(g_list1); g_list1.remove_if(myFun); ShowList(g_list1);}//判断链表是否为空void empty_test(){ list<int> listTemp; if (listTemp.empty()) { cout<<"listTemp 为空"<<endl; } else { cout<<"listTemp不为空"<<endl; }}//可能返回的最大长度void max_size_test(){ list<int>::size_type nMax = g_list1.max_size(); cout<<nMax<<endl;}//反转链表void reverse_test(){ ShowList(g_list1); g_list1.reverse(); ShowList(g_list1);}//排序测试void sort_test(){ list<int> listTest; listTest.push_back(2); listTest.push_back(23); listTest.push_back(32); listTest.push_back(25); listTest.push_back(332); listTest.push_back(2333); listTest.push_back(2231); ShowList(listTest); listTest.sort(); ShowList(listTest);}void unique_test(){ list<int> listTest; listTest.push_back(2); listTest.push_back(23); listTest.push_back(23); listTest.push_back(2); listTest.push_back(32); listTest.push_back(25); listTest.push_back(332); listTest.push_back(2333); listTest.push_back(2231); list<int> listTest2(listTest); ShowList(listTest); listTest.unique();//删除相邻重复元素,不相邻的重复元素不会删除 ShowList(listTest); cout<<endl; listTest.sort(); ShowList(listTest); listTest.unique(); ShowList(listTest); cout<<endl; listTest2.sort(); ShowList(listTest2); listTest2.unique(); ShowList(listTest2); cout<<endl;}//插入函数 三个重载函数void insert_test(){ list<int> listTest(g_list1); ShowList(listTest); listTest.insert(listTest.begin(),66666); ShowList(listTest); cout<<endl; list<int> listTest2(g_list1); ShowList(listTest2); listTest2.insert(listTest2.begin(),9,66666); ShowList(listTest2); cout<<endl; list<int> listTest3(g_list1); ShowList(listTest3); listTest3.insert(listTest3.begin(),listTest2.begin(),listTest2.end()); ShowList(listTest3); cout<<endl;}//交换两个链表void swap_test(){ ShowList(g_list1); ShowList(g_list2); cout<<endl; g_list1.swap(g_list2); ShowList(g_list1); ShowList(g_list2);}//resize重新定义链表长度void resize_test(){ ShowList(g_list1); g_list1.resize(9); // 用默认值填补 ShowList(g_list1); cout << endl; ShowList(g_list2); g_list2.resize(9, 51); // 用指定值填补 ShowList(g_list2);}int _tmain(int argc, _TCHAR* argv[]){ InitList(); //ShowList(g_list1); //ShowList(g_list2); //construct_test1(); //construct_test2(); //construct_test3(); //construct_test4(); //construct_test5(); //assign_test(); //operator_equal_test(); //front_test(); //back_test(); //begin_test(); //end_test(); //rbegin_test(); //rend_test(); //pop_back_test(); //pop_front_test(); //clear_test(); //earse_test(); //remove_test(); //remove_if_test(); //empty_test(); //max_size_test(); //reverse_test(); //sort_test(); //unique_test(); //swap_test(); //insert_test(); resize_test(); getchar(); return 0;}
STL之list测试
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。