如何引用?

    using namespace std::list;
    #include <list>
  

如何宣告一個型態為 T 的 list?

    list <T> listT;
    list <T *> listTP;
  

如何將資料置入?

    class T {
    public:
	T ();
    };

    list <T> listT;
    list <T *>	listTP;

    ...
    T f, b;

    listT.push_back (b);	// 將 b 複製丟到 listT 後面
    listT.push_front (f)	// 將 f 複製丟到 listT 前面
    listTP.push_back (&b);	// 將 b 的 address value 複製丟到 listT 後面
    listTP.push_front (&f);	// 將 f 的 address value 複製丟到 listT 前面
  

如何對 list 使用 for 回圈?

    for (list <char *>::iterator i = listString.begin (); 
	i != listString.end (); i++)
	printf ("%s\n", *i);
  

如果在 for 回圈裡面要移除一份資料呢?

    for (list <char *>::iterator i = listString.begin ();
	i != listString.end (); i++)	{
	...
	delete *i;
	*i = NULL;
	// 千萬不可寫 listString.erase (i) 或者 listString.remove (*i)
	// 要不然得馬上 break,否則 i 的值馬上變成無效值
	// i++ 就會出問題
    }
    // 但是這樣子還沒有結束,得清除 data 為 NULL 的 node
    listString.remove ((char *)NULL);
  

如果清除整個 link 的資料呢?

    // 如果 list 裡面所指向的資料還不需要清除,下面的 for 回圈可以省去
    // 基本上指標型態的 list 存的資料只是一些指向這些資料實體的指標而已
    for (list <char *>::iterator i = listString.begin ();
	i != listString.end (); i++)
	delete *i;
    listString.clear ();
  

如果你經常會在 list 中移除資料,該怎麼寫?

    void fun1 (list <char *> &listString)
    {
	for (list <char *>::iterator i = listString.begin ();
	    i != listString.end (); i++)	{
	    if (!*i)
		continue;
	    ...
	    if (...)	{
		delete *i;
		*i = NULL;
		continue;
	    }
	    ...
	}
	// 這裡不可以使用 listString.remove ((char *)NULL);
	// 因為有可能使外面呼叫的指位器消失
    }
    ...	
    for (list <char *>::iterator i = listString.begin ();
	i != listString.end (); i++)	{
	if (!*i)
	    continue;
	...
	fun1 (listString); // 可能會在裡面動到 listString
	if (!*i)
	    continue;
    }
    // 只能在確定不會影響到其他同樣指到 listString 的 iterator (指位器)
    // 的情況下移除內容為 NULL 的指位器
    listString.remove ((char *)NULL);