• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            huyutian

            他強由他強,清風拂山崗;他橫由他橫,明月照大江。他自狠來他自惡,我自一口真氣足

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              20 隨筆 :: 47 文章 :: 22 評論 :: 0 Trackbacks
            /*
            list: 等同于雙向鏈表,內存空間可以是不連續的,通過指針來進行數據的訪問
               優: 1)插入/刪除效率高
               缺: 1)不支持隨機存取,查詢效率較低
            */

            #include 
            <iostream>
            #include 
            <string>
            #include 
            <list>
            using namespace std;

            void printList(list<int> nList)
            {
            //使用迭代器
            //list<int>::iterator iter;
            //for ( iter = nList.begin(); iter != nList.end(); iter++)
            //{
            // cout<<*iter<<", ";
            //}

            //使用迭代器指針
            list<int>::iterator *pIter = new list<int>::iterator; //list<int>::iterator *pIter;error,原因見vector相應函數
            if ( NULL == pIter )
            {
               
            return;
            }

            for (*pIter = nList.begin(); *pIter != nList.end(); (*pIter)++//此處不可寫成*pIter++
            {
               cout
            <<**pIter<<"";
            }

            cout
            <<endl;
            }

            int main()
            {
            //創建list
            list<int> l1; //創建一個沒有任何元素的list
            list<int> l2(10); //創建一個有n個元素的list,每個元素值為默認
            list<double> l3(109.3); //創建具有10個元素的list,每個元素的初始值為9.3
            list<double> l4(l3); //通過拷貝一個list對象的元素,創建一個新的list對象
            int iArray[] ={31019};
            list
            <int> l5(iArray, iArray + 3);//將另一個list對象的迭代器區間[first, last)所指的元素,拷貝到新創建的list對象中

            //初如化賦值 :用push_back將元素依次鏈入LIST中
            for (int i = 1; i<6; i++)
               l1.push_back(i);

            list
            <int>::iterator iter;
            cout
            <<"printList(l1): "<<endl;
            printList(l1);

            //元素插入 :尾部添加用push_back(); 首部插入用push_front();任意位置插入用insert(&pos, elem) 
            //下面語句error:list與vector不同,因為存儲方式上的差異, list不能+n,只能++,
            //這種情況下最好還是通過迭代器++為好
            //l1.insert((l1.begin())+1, 100); 
            l1.insert(++l1.begin(), 100); //或者用iter=l1.begin(); iter++;l1.insert(iter, 100);
            cout<<"++l1.insert(l1.begin(),100) (if use l1.begin()+1 is error) = "<<endl;
            printList(l1);

            cout
            <<"l1.push_back(200) = "<<endl;
            l1.push_back(
            200);
            printList(l1);
            cout
            <<"l1.push_front(-200) = "<<endl;
            l1.push_front(
            -200);
            printList(l1);

            //元素刪除: 尾部刪除用pop_back(); 首部刪除用pop_front(); 
            //指定元素的刪除,位置用erase(&pos); 區間用erase(&first_pos, &last_pos)
            //刪除所有元素用 clear(); 
            //刪除list中所有元素值為value的元素用remove(value)
            cout<<"l1.pop_back() = "<<endl;
            l1.pop_back();
            printList(l1);
            cout
            <<"l1.pop_front() = "<<endl;
            l1.pop_front();
            printList(l1);

            cout
            <<"l1.erase(++l1.begin()) = "<<endl;
            l1.erase(
            ++l1.begin());
            printList(l1);

            iter
            = l1.begin();
            iter
            ++;
            iter
            ++;
            cout
            <<"iter=l1.begin; iter++;iter++; l1.erase(l1.begin(), iter) = "<<endl;
            l1.erase(l1.begin(), iter);
            printList(l1);
            cout
            <<"l1.remove(100) = "<<endl;
            l1.remove(
            100);
            printList(l1);
            cout
            <<"l1.remove(4) = "<<endl;
            l1.remove(
            4);
            printList(l1);

            //其它
            cout<<"其它: "<<endl;
            list
            <int> listTest;
            for (int i =1; i<6; i++)
               listTest.push_back(i
            *100);
            cout
            <<"printList(listTest) = "<<endl;
            printList(listTest);
            //swap函數
            cout<<"after l1.swap(listTest), l1 = "<<endl;
            l1.swap(listTest);
            printList(l1);

            //splice函數 
            //void splice(&pos, list &x):將list x歸并到當前list的&pos之前,同時list x將被清空
            //void splice(&pos, list &x, &x.pos),將list x中迭代器x.pos處的元素歸并到當前list,同時被歸并的元素將被清空
            cout<<"after l1.splice(l1.begin(), listTest):"<<endl;
            l1.swap(listTest); 
            //恢復
            l1.splice(l1.begin(), listTest);
            cout
            <<"l1 = "<<endl;
            printList(l1);
            cout
            <<"listTest = "<<endl;
            printList(listTest);

            l1.clear();
            for (int i = 1; i<6; i++)
               l1.push_back(i);
            for (int i =1; i<6; i++)
               listTest.push_back(i
            *100); //恢復
            cout<<"after l1.splice(++l1.begin(), listTest, --listTest.end()) :"<<endl;
            l1.splice(
            ++l1.begin(), listTest, --listTest.end());
            cout
            <<"l1 = "<<endl;
            printList(l1);
            cout
            <<"listTest = "<<endl;
            printList(listTest);

            //merge函數(略)歸并的兩鏈表都是是有序性,此函數才有意義
            //sort
            cout<<"now l1 is set as : "<<endl;
            l1.clear();
            for (int i = 9; i >= 0; i--)
               l1.push_back(i);
            printList(l1);

            cout
            <<"l1.sort() = "<<endl;
            l1.sort();
            printList(l1);

            cout
            <<"l1.empty() = "<<l1.empty()<<", l1.size() = "<<l1.size()<<endl;
            cout
            <<"after l1.clear(): "<<endl;
            l1.clear();
            cout
            <<"l1.empty() = "<<l1.empty()<<", l1.size() = "<<l1.size()<<endl;
            }




            //測試結果
            printList(l1):
            12345,
            ++l1.insert(l1.begin(),100) (if use l1.begin()+1 is error
            11002345,
            l1.push_back(
            200=
            11002345200,
            l1.push_front(
            -200=
            -20011002345200,
            l1.pop_back() 
            =
            -20011002345,
            l1.pop_front() 
            =
            11002345,
            l1.erase(
            ++l1.begin()) =
            12345,
            iter
            =l1.begin; iter++;iter++; l1.erase(l1.begin(), iter)
            345,
            l1.remove(
            100=
            345,
            l1.remove(
            4=
            35,
            其它:
            printList(listTest) 
            =
            100200300400500,
            after l1.swap(listTest), l1 
            =
            100200300400500,
            after l1.splice(l1.begin(), listTest):
            l1 
            =
            10020030040050035,
            listTest 
            =

            after l1.splice(
            ++l1.begin(), listTest, --listTest.end())
            l1 
            =
            15002345,
            listTest 
            =
            100200300400,
            now l1 
            is set as :
            9876543210,
            l1.sort() 
            =
            0123456789,
            l1.empty() 
            = 0, l1.size() = 10
            after l1.clear():
            l1.empty() 
            = 1, l1.size() = 0
            posted on 2010-02-07 23:59 胡雨田 閱讀(4864) 評論(2)  編輯 收藏 引用 所屬分類: 編程技巧

            評論

            # re: 轉貼:STL之list之用法小結[未登錄] 2010-05-27 19:08 jack
            轉我的貼,沒有注明地址,哎。。  回復  更多評論
              

            # re: 轉貼:STL之list之用法小結 2012-02-03 09:50 coco
            非常好的總結  回復  更多評論
              

            色综合久久最新中文字幕| 久久九九有精品国产23百花影院| 国产精品成人99久久久久 | 久久亚洲精品无码VA大香大香| 久久精品国产99久久丝袜| 午夜精品久久久久久| 久久www免费人成看片| 精品国产VA久久久久久久冰 | 色诱久久av| 精品永久久福利一区二区| 久久亚洲电影| 久久久精品2019免费观看| 欧美精品福利视频一区二区三区久久久精品 | 久久久噜噜噜www成人网| 久久精品国产亚洲精品| 久久久久久毛片免费播放| 久久精品成人一区二区三区| av无码久久久久不卡免费网站| 亚洲欧美另类日本久久国产真实乱对白 | 久久99热狠狠色精品一区| 亚洲伊人久久综合中文成人网| 日韩欧美亚洲综合久久影院d3| 久久天天躁夜夜躁狠狠躁2022| 久久精品国产亚洲av瑜伽| 99久久精品国产麻豆| 久久午夜无码鲁丝片秋霞| 久久强奷乱码老熟女| 国产精品久久久久乳精品爆| 国产一久久香蕉国产线看观看| 亚洲国产精品18久久久久久| 性做久久久久久久久| 久久午夜福利电影| 大蕉久久伊人中文字幕| 国内精品久久久久影院日本| 亚洲精品国产美女久久久| 久久久久久精品无码人妻| 精品国产乱码久久久久久人妻| 国产精品久久久久蜜芽| 久久久久久久精品妇女99| 国产激情久久久久久熟女老人| AV无码久久久久不卡蜜桃|