یکی از پرکاربردترین کانتینر ها بعد از vector در زبان سی پلاس پلاس کانتینر List می باشد که در این زبان به صورت یک doubly link list پیاده سازی شده است یعنی هر یک از node های این لیست هم آدرس node قبلی را دارند وهم آدرس node بعدی را ذخیره کرده اند، به همین علت در صورتی که بدنبال لیستی هستید که بتوانید درج و حذف های مکرر در قسمت های مختلف انجام دهید قطعا از کانتینر لیست باید استفاده کنید.
در مثال زیر یک نمونه ساده استفاده از List و Vector را مشاهده میکنید که با استفاده از الگوریتم های مختلف لیست ها را مورد پیمایش قرار داده ایم.
نکته : برای اجرای کدها باید از C++‎‎‎‎‎11 به بعد استفاده کنید.

#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
#include <vector>


#define SEP_LINE() std::cout << "\n-----------------------" << '\n'


struct Table {
int i;
bool operator<(const Table& tbl1 ){
return (tbl1.i < i);
}
bool operator()(const Table& tbl1 , const Table& tbl2){
return (tbl1.i < tbl2.i);
}
friend std::ostream& operator<<(std::ostream& os ,const Table& tbl){
os << tbl.i ;
return os;
}
};
using list_table = std::list<Table>;
using vector_table = std::vector<Table>;


template<class Tp>
class OutputStream :std::ostream_iterator<Tp>{
public:
using ostream_ptr = std::ostream_iterator<Tp>;
using list_t = std::list<Tp>;
using list_itr = list_table::iterator;
using vector_itr = vector_table::const_iterator;


OutputStream(const char* format , std::ostream& os_type) : std::ostream_iterator<Tp>(os_type , format) {
}


template<typename T>
void outPut(T table){
std::cout << table << "-" ;
}


/*print container element by for each in Modern C++‎‎‎‎‎‎‎11 */
template<typename T>
void print_forech1(T container){
for(const auto& element : container)
outPut(element);
}


/*print container element by copy algorithm in C++‎‎‎‎‎‎‎98-ISO*/
template<typename T>
void operator()(T container){
std::copy(container.begin(),container.end() , *this->get());
}


/*print container element by for_each algorithm in C++‎‎‎‎‎‎‎98-ISO*/
template<typename T>
void print_forech2(T container){
for_each(container.begin() , container.end() , [&](const Tp table){ outPut(table); });
}


/*print container element by for iterator in C++‎‎‎‎‎‎‎98-ISO*/
template<class T>
void print_forech3(T container){
for(list_itr element=container.begin() ; element != container.end() ; ++element)
outPut(*element);
}


/*print container element by while iterator in C++‎‎‎‎‎‎‎98-ISO*/
template<class T>
void print_forech4(T container){
vector_itr element=container.cbegin() ;
while(element != container.cend())
outPut(*element++);
}
private:
const ostream_ptr* get() const {
return static_cast<const ostream_ptr*>(this);
}
};


int main()
{
OutputStream<Table> output("-" , std::cout);
list_table tblList {{4},{3},{1},{5},{2},{6},{8},{9},{10},{7}};


/* sort by default */
tblList.sort();
std::cout << "sort list by overloaded operator < in structure object." << '\n';
output(tblList);
SEP_LINE();


/* sort by functor */
tblList.sort(Table());
std::cout << "sort list by overloaded operator () in structure object." << '\n';
output.print_forech3(tblList);
SEP_LINE();


/* sort by lambda comparator */
tblList.sort([](Table& tbl1 , Table& tbl2){return (tbl1.i < tbl2.i);});
std::cout << "sort list by lambda functor comparator." << '\n';
output.print_forech2(tblList);
SEP_LINE();


std::cout << "print sorted list elements by for each C++‎‎‎‎‎‎‎11." << '\n';
output.print_forech1(tblList);
SEP_LINE();


/* create vector container and sort by functor
because std::vector is not member function sort.
vector container sorted by std::sort algorithm
*/
vector_table vecTable {{14},{13},{11},{15},{12},{16},{18},{19},{10},{17} };
std::sort(vecTable.begin() , vecTable.end() , Table()) ;
std::cout << "print sorted vector elements by while loop iteration ." << '\n';
output.print_forech4(vecTable);
SEP_LINE();


return 0;
}



کدها کاملا واضح و گویا هستند در صورتی که نیاز به توضیحات بیشتر بود در همین تاپیک اعلام کنید.