feature: double linked list
example code of almost all functions
#include <list>
#include <iostream>
using namespace std;
//display in order
void display_all(const list<int> &li)
{
list<int>::const_iterator iter;
for(iter = li.begin(); iter!= li.end(); iter++)
cout << *iter << " , ";
cout << "\n";
}
//display in rorder
void display_all_r(const list<int> &li)
{
list<int>::const_reverse_iterator riter;
for(riter = li.rbegin(); riter!= li.rend(); riter++)
cout << *riter << " , ";
cout << "\n";
}
int main( void)
{
//default constructor
list<int> c1;
list<int> c2(10,4);
//copy constructor
list<int> c3(c2);
int ai[]={0,1,2,3,4,5};
int i;
list<int> c4;
//get_allocator
list<int>::allocator_type a1 = c4.get_allocator();
for( i = 0; i < 5;i++ )
c4.push_back(i);
//range copy constructor
list<int> c5(c4.begin(), c4.end());
cout << "c4(use begin, end) ";
display_all(c4);
cout << "\n";
cout << "c4(use rbegin, rend) ";
display_all_r(c4);
cout << "last element in c2 = " << c2.back() << "\n";
cout << "first element in c2 = " << c2.front() << "\n";
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "max number of elements c2 can hold using current allocator = " << c2.max_size() << "\n";
c3.erase(c3.begin(), c3.end());
c2.clear();
if(c2.empty() == true)
cout << "c2 is now empty" << std::endl;
//resize @para1: new_size ;@para2: value
c2.resize(10, 30);
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "last element in c2 = " << c2.back() << "\n";
cout << "first element in c2 = " << c2.front() << "\n";
c2.push_front(25);
c2.push_back(55);
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "first element in c2 = " << c2.front() << "\n";
c2.pop_back();
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "last element in c2 = " << c2.back() << "\n";
c2.pop_front();
cout << "first element in c2 = " << c2.front() << "\n";
c3.push_back(20);
cout << "\n swap \n";
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "number of elements in c3 = " << c3.size() << "\n" ;
cout << "c2 = ";
display_all(c2);
cout << "c3 = ";
display_all(c3);
c3.swap(c2);
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "number of elements in c3 = " << c3.size() << "\n" ;
cout << "c2 = ";
display_all(c2);
cout << "c3 = ";
display_all(c3);
c1.insert(c1.begin(), 20);
cout << "c1 = ";
display_all(c1);
c3.insert(c3.begin(), 4, 10);
c3.insert(c3.end(), c5.begin(), c5.end());
c3.reverse();
display_all(c3);
c3.remove(30);
cout << "after remove all the occurennces of 30 in c3 , c3 = ";
display_all(c3);
c2.insert(c2.begin(), 4, 10);
c2.insert(c2.begin(), 5);
cout<< "c2 = " ;
display_all(c2);
c2.remove_if(bind2nd(not_equal_to<int>(), 10) );
cout<< "remove_if c2 = " ;
display_all(c2);
c3.insert(c3.begin(), 35);
c3.sort();
cout << "sort c3 = " ;
display_all(c3);
//remove duplicate elements
c2.insert(c2.end(), 5);//insert before ,so we can insert before end()
c2.unique();
cout << " After unique c2 = " ;
display_all(c2);
cout << "before splice \n";
cout << "c4 = ";
display_all(c4);
cout << "c3 = ";
display_all(c3);
cout << "c2 = ";
display_all(c2);
cout << "c1 = ";
display_all(c1);
c3.splice(c3.end(), c2);//insert the whole list
c3.splice(c3.end(), c4, c4.begin());//insert only the pos
c3.splice(c3.end(), c1, c1.begin(), c1.end());//insert the range
cout << "after splice \n";
cout << "c4 = ";
display_all(c4);
cout << "c3 = ";
display_all(c3);
cout << "c2 = ";
display_all(c2);
cout << "c1 = ";
display_all(c1);
c3.sort();
c3.unique();
cout << "sort and unique c3 = ";
display_all(c3);
}
#include <iostream>
using namespace std;
//display in order
void display_all(const list<int> &li)
{
list<int>::const_iterator iter;
for(iter = li.begin(); iter!= li.end(); iter++)
cout << *iter << " , ";
cout << "\n";
}
//display in rorder
void display_all_r(const list<int> &li)
{
list<int>::const_reverse_iterator riter;
for(riter = li.rbegin(); riter!= li.rend(); riter++)
cout << *riter << " , ";
cout << "\n";
}
int main( void)
{
//default constructor
list<int> c1;
list<int> c2(10,4);
//copy constructor
list<int> c3(c2);
int ai[]={0,1,2,3,4,5};
int i;
list<int> c4;
//get_allocator
list<int>::allocator_type a1 = c4.get_allocator();
for( i = 0; i < 5;i++ )
c4.push_back(i);
//range copy constructor
list<int> c5(c4.begin(), c4.end());
cout << "c4(use begin, end) ";
display_all(c4);
cout << "\n";
cout << "c4(use rbegin, rend) ";
display_all_r(c4);
cout << "last element in c2 = " << c2.back() << "\n";
cout << "first element in c2 = " << c2.front() << "\n";
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "max number of elements c2 can hold using current allocator = " << c2.max_size() << "\n";
c3.erase(c3.begin(), c3.end());
c2.clear();
if(c2.empty() == true)
cout << "c2 is now empty" << std::endl;
//resize @para1: new_size ;@para2: value
c2.resize(10, 30);
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "last element in c2 = " << c2.back() << "\n";
cout << "first element in c2 = " << c2.front() << "\n";
c2.push_front(25);
c2.push_back(55);
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "first element in c2 = " << c2.front() << "\n";
c2.pop_back();
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "last element in c2 = " << c2.back() << "\n";
c2.pop_front();
cout << "first element in c2 = " << c2.front() << "\n";
c3.push_back(20);
cout << "\n swap \n";
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "number of elements in c3 = " << c3.size() << "\n" ;
cout << "c2 = ";
display_all(c2);
cout << "c3 = ";
display_all(c3);
c3.swap(c2);
cout << "number of elements in c2 = " << c2.size() << "\n" ;
cout << "number of elements in c3 = " << c3.size() << "\n" ;
cout << "c2 = ";
display_all(c2);
cout << "c3 = ";
display_all(c3);
c1.insert(c1.begin(), 20);
cout << "c1 = ";
display_all(c1);
c3.insert(c3.begin(), 4, 10);
c3.insert(c3.end(), c5.begin(), c5.end());
c3.reverse();
display_all(c3);
c3.remove(30);
cout << "after remove all the occurennces of 30 in c3 , c3 = ";
display_all(c3);
c2.insert(c2.begin(), 4, 10);
c2.insert(c2.begin(), 5);
cout<< "c2 = " ;
display_all(c2);
c2.remove_if(bind2nd(not_equal_to<int>(), 10) );
cout<< "remove_if c2 = " ;
display_all(c2);
c3.insert(c3.begin(), 35);
c3.sort();
cout << "sort c3 = " ;
display_all(c3);
//remove duplicate elements
c2.insert(c2.end(), 5);//insert before ,so we can insert before end()
c2.unique();
cout << " After unique c2 = " ;
display_all(c2);
cout << "before splice \n";
cout << "c4 = ";
display_all(c4);
cout << "c3 = ";
display_all(c3);
cout << "c2 = ";
display_all(c2);
cout << "c1 = ";
display_all(c1);
c3.splice(c3.end(), c2);//insert the whole list
c3.splice(c3.end(), c4, c4.begin());//insert only the pos
c3.splice(c3.end(), c1, c1.begin(), c1.end());//insert the range
cout << "after splice \n";
cout << "c4 = ";
display_all(c4);
cout << "c3 = ";
display_all(c3);
cout << "c2 = ";
display_all(c2);
cout << "c1 = ";
display_all(c1);
c3.sort();
c3.unique();
cout << "sort and unique c3 = ";
display_all(c3);
}