久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2221|回復(fù): 0
收起左側(cè)

C++ STL:vector容器基本命令與理解

[復(fù)制鏈接]
ID:821675 發(fā)表于 2020-9-21 21:55 | 顯示全部樓層 |閱讀模式
## STL基本命令

## **1.vector是什么?**
vector是C++語(yǔ)言中的一種數(shù)組容器,用于順序存放用戶放入的數(shù)據(jù),它與普通數(shù)組的區(qū)別在于,vector是可動(dòng)態(tài)擴(kuò)展的單端數(shù)組,當(dāng)其容量不足以存放新的數(shù)據(jù)時(shí),vector會(huì)自主的尋找更大的內(nèi)存空間,并將原本數(shù)據(jù)與新加入數(shù)據(jù)拷貝到新空間中,同時(shí)釋放原存儲(chǔ)內(nèi)存空間。

       
       
       

## **2. vector 容器的構(gòu)造方式:**

2.1 vector<T> v; // 利用模板實(shí)現(xiàn)容器構(gòu)造,調(diào)用默認(rèn)的構(gòu)造函數(shù)
2.2 vector(v.begin(),v.end());//將已有的容器中[v.begin(),v.end()]區(qū)間元素拷貝
2.3 vector(n,elem);//將n個(gè)elem元素給容器
2.4 vector(const vector &v)//拷貝構(gòu)造函數(shù)
例子:

```cpp
void printVector(vector<int> &v)
{
        //遍歷容器數(shù)據(jù)
        for (vector<int>::iterator pBegin = v.begin(); pBegin != v.end(); pBegin++)
        {
                cout << *pBegin << endl;

        }

}
void test01()
{
        vector<int> v1;//創(chuàng)建數(shù)組容器
        for (int i = 0; i < 10; i++)
        {
                v1.push_back(i); //數(shù)據(jù)存入
        }
        printVector(v1);
        vector<int> v2 = v1;  將容器1賦值給容器2
        printVector(v2);
        vector<int> v3(10, 100); 將10個(gè)100復(fù)制給容器
        printVector(v3);
        vector<int> v4(v3);   //容器的復(fù)制
        printVector(v4);  
}
```

## **3. vector容量和大小**

        vector<int> v;
        3.1 v.empty();//判斷容器是否為空
        3.2 v.size();//獲得當(dāng)前容器元素個(gè)數(shù),為容器的大小
        3.3 v.capacity();//獲得容器當(dāng)前容量,即在容器不重新尋找內(nèi)存空間的基礎(chǔ)上,容器所能存儲(chǔ)的元素容量大小。
        3.4 v.resize(int num,elem);//重構(gòu)容器大小,若容器變長(zhǎng)則以elem填充新位置,若容器變短,則超出長(zhǎng)度元素被刪除,elem可省略。

## **4. vector插入和刪除**

        4.1 v.push_back(elem);//在容器尾部插入元素elem,               
        4.2 v.pop_back();//刪除容器尾部元素
        4.3 v.insert(const_iterator pos,num,ele);//在迭代器指向位置pos處,添加num個(gè)ele元素。
        4.4 v.erase(const_iterator start,const_iterator end);//刪除容器中,[start,end]區(qū)間元素
        例子:**(關(guān)于出現(xiàn)vector incompatible 錯(cuò)誤的發(fā)現(xiàn)與解決)**
       

```cpp
//在容器v中找到指向n處的迭代器函數(shù)
vector<int>::iterator  Getposition(int n,vector<int> &v)
{
        if (n > v.size())
        {
                cout << "超出查詢范圍" << endl;
        }
        vector<int>::iterator it = v.begin();
        for (int i = 0; i < n; i++)
        {
                it++;
        }
        return it;
}void test01()
{
        vector<int> v1;//創(chuàng)建數(shù)組容器
        for (int i = 0; i < 10; i++)
        {
                v1.push_back(i);
        }
        printVector(v1);   
        //報(bào)錯(cuò)代碼
        /*
        vector<int>::iterator it1 = Getposition(5, v1);//將迭代器指向第5個(gè)元素位置
        v1.insert(it1, 1, 6); //在迭代器it指向位置處增加6
        ctor<int>::iterator it2 = Getposition(7, v1);
        v1.erase(it1,it2);刪除第五個(gè)元素與第六個(gè)元素間的內(nèi)容
        */
        vector<int>::iterator it1 = Getposition(5, v1);//將迭代器指向第5個(gè)元素位置
        v1.insert(it1, 1, 6); //在迭代器it指向位置處增加6
        vector<int>::iterator it2 = Getposition(5, v1);
        vector<int>::iterator it3 = Getposition(7, v1);
        v1.erase(it2,it3);刪除第五個(gè)元素與第六個(gè)元素間的內(nèi)容
}
```
在一開(kāi)始運(yùn)行報(bào)錯(cuò)代碼時(shí),出現(xiàn)了''vector iterator incompatible'' 的錯(cuò)誤,在經(jīng)過(guò)不斷查找和代碼摸索后發(fā)現(xiàn),在向一個(gè)vector、string或deque插入元素會(huì)使指向容器的迭代器、引用和指針失效,由此造成報(bào)錯(cuò)。因此在執(zhí)行完插入命令后,需要對(duì)迭代器進(jìn)行更新。
        4.5 clear();//刪除容器中元素

## **5. vector 數(shù)據(jù)存取**
5.1 v.at(i)& v [i]; //返回容器位置i處信息
5.2 v.front() & v.back();  //返回容器首尾信息
5.3 v.swap(v1); //容器v和v1 互換
實(shí)用:實(shí)現(xiàn)容器收縮內(nèi)存:在對(duì)容器進(jìn)行resize()操作縮小后,容量并未改變,此時(shí)利用自我互換可實(shí)現(xiàn)收縮內(nèi)存的效果。
例:

```cpp
void test02()
{   
         vector<int> v;
         for (int i = 0; i < 100000; i++)
          {        
                          v.push_back(i);   
          }

    cout << "v的容量為:" << v.capacity() << endl;
    cout << "v的大小為:" << v.size() << endl;
        v.resize(3);
        cout << "v的容量為:" << v.capacity() << endl;   
        cout << "v的大小為:" << v.size() << endl;
        //收縮內(nèi)存   
    vector<int>(v).swap(v); //匿名對(duì)象
    cout << "v的容量為:" << v.capacity() << endl;   
    cout << "v的大小為:" << v.size() << endl;
}

5.5 v.reserve(int len); //容器預(yù)留len個(gè)元素長(zhǎng)度空間,目的是減少vector動(dòng)態(tài)空間變化次數(shù)。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产成人精品久久久国产成人一区 | 亚洲va欧美va人人爽午夜 | 亚洲视频免费观看 | 久久高清免费视频 | www.99re | 免费看日韩视频 | 国产高清精品一区二区三区 | 亚洲精品一区二区二区 | 日日噜噜噜夜夜爽爽狠狠视频, | 亚洲综合天堂 | 成人在线观看免费视频 | 亚洲一区二区在线视频 | 国产成人免费视频网站视频社区 | www久久av| 国产精品99| 国产精品成人一区二区三区吃奶 | 日韩一二区 | 自拍亚洲 | 天天久久 | 91成人在线视频 | 国产精品大片在线观看 | 日本在线观看视频 | 亚洲综合中文字幕在线观看 | 国产精品伦理一区二区三区 | 国产成人精品av | av中文在线播放 | 亚洲国产成人av好男人在线观看 | 欧美在线观看一区二区 | 欧美日韩国产综合在线 | 精品国产免费人成在线观看 | 亚洲视频免费在线看 | 久久这里只有精品首页 | 国产成人啪免费观看软件 | 免费网站国产 | 欧美日韩在线观看视频网站 | 日韩亚洲视频 | 欧美午夜视频 | 日日夜夜影院 | 色综合99 | 91视频导航 | 亚洲va欧美va天堂v国产综合 |