标签:style io ar color os 使用 sp for on
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; //初始化全局变量 list void 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()回传指向最后一个元素的反向 iterator void 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; }
标签:style io ar color os 使用 sp for on
原文地址:http://blog.csdn.net/djb100316878/article/details/41447235