list是C++標準模版庫(STL,Standard Template Library)中的部分內容。實際上,list容器就是一個雙向鏈表,可以高效地進行插入刪除元素。 使用list容器之前必須加上STL的list容器的頭文件:#include ...
#include <iostream> #include <list> #include <algorithm> #include <stdlib.h> #include <string.h> typedef struct info_s { int nNumber; bool operator==(struct info_s b) const { return this->nNumber == b.nNumber; } bool operator!=(struct info_s b) const { return this->nNumber != b.nNumber; } bool operator>=(struct info_s b) const { return this->nNumber >= b.nNumber; } bool operator<=(struct info_s b) const { return this->nNumber <= b.nNumber; } bool operator>(struct info_s b) const { return this->nNumber > b.nNumber; } bool operator<(struct info_s b) const { return this->nNumber < b.nNumber; } }info_t; typedef std::list< info_t > list_t; void append(list_t &List, info_t &info) { std::cout<<"***append****"<<std::endl; List.push_back(info); } void for_each(list_t &List) { std::cout<<"***for_each****"<<std::endl; list_t::iterator iter; for(iter = List.begin(); iter != List.end() ;iter++) { std::cout<< iter->nNumber <<std::endl; } } void del_end_info(list_t &List) { std::cout<<"***del_end_info****"<<std::endl; if(! List.empty()) { List.pop_back(); } } void for_each_delete(list_t &List) { list_t::iterator iter; for(iter = List.begin(); iter != List.end() ;) { std::cout<< "delete before iter->number:"<<iter->nNumber <<std::endl; iter = List.erase(iter); std::cout<< "delete after iter->number:"<< iter->nNumber <<std::endl; } } int insert_one(list_t &List , info_t &info, int iPlace) { int i = 0; std::cout<<"insert_one"<<std::endl; if(iPlace < 0) { std::cout<<"insert_one param error"<<std::endl; return -1; } list_t::iterator iter = List.begin(); while(iter != List.end()) { //std::cout<<" dump "<< (*iVector)<<std::endl; if(i == iPlace) { iter = List.insert(iter , info); //此時insert的返回值是迭代器,插入成功後iVector指向插入的位置 std::cout<<" insert_one after List point "<<iter->nNumber <<std::endl; return 0; } i++; ++iter; } iter = List.insert(List.end() , info); return 0; } void find_one(list_t &List,info_t info ) { std::cout<<"find_one"<<std::endl; list_t::iterator iter ; iter = std::find(List.begin(),List.end(), info); if(iter != List.end()) { std::cout<<"find it"<<std::endl; } else { std::cout<<"not find it"<<std::endl; } } void Sort(list_t & List) { std::cout<<"Sort it"<<std::endl; List.sort(); for_each(List); } int main() { //初始化 list_t List; info_t info; memset(&info, 0, sizeof(info_t)); //添加 info.nNumber = 8; append(List, info); info.nNumber = 5; append(List, info); info.nNumber = 7; append(List, info); info.nNumber = 1; append(List, info); info.nNumber = 1; append(List, info); info.nNumber = 2; append(List, info); info.nNumber = 1; append(List, info); //遍歷 for_each(List); //插入 info.nNumber = 80; insert_one(List,info,3); for_each(List); //查找 find_one(List,info); //排序 Sort(List); //刪除末尾 del_end_info(List); for_each(List); std::cout<< " size:"<<List.size()<<std::endl; //刪除所有 // List.clear(); for_each_delete(List); for_each(List); std::cout<< " size:"<<List.size()<<std::endl; return 0; }