日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

栈堆的emplace和push_C++(STL):19---deque之删除和emplace用法

發布時間:2025/5/22 c/c++ 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈堆的emplace和push_C++(STL):19---deque之删除和emplace用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

deque 容器中,無論是添加元素還是刪除元素,都只能借助 deque 模板類提供的成員函數。表 1 中羅列的是所有和添加或刪除容器內元素相關的 deque 模板類中的成員函數。

表 1 和添加或刪除deque容器中元素相關的成員函數

成員函數功能push_back()在容器現有元素的尾部添加一個元素,和 emplace_back() 不同,該函數添加新元素的過程是,先構造元素,然后再將該元素移動或復制到容器的尾部。pop_back()移除容器尾部的一個元素。push_front()在容器現有元素的頭部添加一個元素,和 emplace_back() 不同,該函數添加新元素的過程是,先構造元素,然后再將該元素移動或復制到容器的頭部。pop_front()移除容器尾部的一個元素。emplace_back()C++ 11 新添加的成員函數,其功能是在容器尾部生成一個元素。和 push_back() 不同,該函數直接在容器頭部構造元素,省去了復制或移動元素的過程。emplace_front()C++ 11 新添加的成員函數,其功能是在容器頭部生成一個元素。和 push_front() 不同,該函數直接在容器頭部構造元素,省去了復制或移動元素的過程。insert()在指定的位置直接生成一個元素。和 emplace() 不同的是,該函數添加新元素的過程是,先構造元素,然后再將該元素移動或復制到容器的指定位置。emplace()C++ 11 新添加的成員函數,其功能是 insert() 相同,即在指定的位置直接生成一個元素。和 insert() 不同的是,emplace() 直接在容器指定位置構造元素,省去了復制或移動元素的過程。erase()移除一個元素或某一區域內的多個元素。clear()刪除容器中所有的元素。

在實際應用中,常用 emplace()、emplace_front() 和 emplace_back() 分別代替 insert()、push_front() 和 push_back(),具體原因本節后續會講。

以上這些成員函數中,除了 insert() 函數的語法格式比較多,其他函數都只有一種用法(erase() 有 2 種語法格式),下面這段程序演示了它們的具體用法:

#include

#include

using namespace std;

int main()

{

dequed;

//調用push_back()向容器尾部添加數據。

d.push_back(2); //{2}

//調用pop_back()移除容器尾部的一個數據。

d.pop_back(); //{}

//調用push_front()向容器頭部添加數據。

d.push_front(2);//{2}

//調用pop_front()移除容器頭部的一個數據。

d.pop_front();//{}

//調用 emplace 系列函數,向容器中直接生成數據。

d.emplace_back(2); //{2}

d.emplace_front(3); //{3,2}

//emplace() 需要 2 個參數,第一個為指定插入位置的迭代器,第二個是插入的值。

d.emplace(d.begin() + 1, 4);//{3,4,2}

for (auto i : d) {

cout << i << " ";

}

//erase()可以接受一個迭代器表示要刪除元素所在位置

//也可以接受 2 個迭代器,表示要刪除元素所在的區域。

d.erase(d.begin());//{4,2}

d.erase(d.begin(), d.end());//{},等同于 d.clear()

return 0;

}

運行結果為:

3 4 2

這里重點講一下 insert() 函數的用法。insert() 函數的功能是在 deque 容器的指定位置插入一個或多個元素。該函數的語法格式有多種,如表 2 所示。

表 2 insert() 成員函數語法格式

語法格式功能iterator insert(pos,elem)在迭代器 pos 指定的位置之前插入一個新元素elem,并返回表示新插入元素位置的迭代器。iterator insert(pos,n,elem)在迭代器 pos 指定的位置之前插入 n 個元素 elem,并返回表示第一個新插入元素位置的迭代器。iterator insert(pos,first,last) 在迭代器 pos 指定的位置之前,插入其他容器(不僅限于vector)中位于 [first,last) 區域的所有元素,并返回表示第一個新插入元素位置的迭代器。iterator insert(pos,initlist)在迭代器 pos 指定的位置之前,插入初始化列表(用大括號{}括起來的多個元素,中間有逗號隔開)中所有的元素,并返回表示第一個新插入元素位置的迭代器。

下面的程序演示了 insert() 函數的這幾種用法:

#include #include #include using namespace std;int main(){std::deque d{ 1,2 };//第一種格式用法d.insert(d.begin() + 1, 3);//{1,3,2}//第二種格式用法d.insert(d.end(), 2, 5);//{1,3,2,5,5}//第三種格式用法std::arraytest{ 7,8,9 };d.insert(d.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}//第四種格式用法d.insert(d.end(), { 10,11 });//{1,3,2,5,5,7,8,9,10,11}for (int i = 0; i < d.size(); i++) {cout << d[i] << " ";}return 0;}

運行結果為:

1,3,2,5,5,7,8,9,10,11

emplace系列函數的優勢

有關 emplace()、emplace_front() 和 emplace_back() 分別和 insert()、push_front() 和 push_back() 在運行效率上的對比,可以通過下面的程序體現出來:

#include #include using namespace std;class testDemo{public:testDemo(int num) :num(num) {std::cout << "調用構造函數" << endl;}testDemo(const testDemo& other) :num(other.num) {std::cout << "調用拷貝構造函數" << endl;}testDemo(testDemo&& other) :num(other.num) {std::cout << "調用移動構造函數" << endl;}testDemo& operator=(const testDemo& other);private:int num;};

testDemo& testDemo::operator=(const testDemo& other) {this->num = other.num;return *this;}int main(){//emplace和insertcout << "emplace:" << endl;std::deque demo1;demo1.emplace(demo1.begin(), 2);cout << "insert:" << endl;std::deque demo2;demo2.insert(demo2.begin(), 2);

//emplace_front和push_frontcout << "emplace_front:" << endl;std::deque demo3;demo3.emplace_front(2);cout << "push_front:" << endl;std::deque demo4;demo4.push_front(2);

//emplace_back()和push_back()cout << "emplace_back:" << endl;std::deque demo5;demo5.emplace_back(2);

cout << "push_back:" << endl;std::deque demo6;demo6.push_back(2);return 0;}

運行結果為:

emplace:調用構造函數insert:調用構造函數調用移動構造函數emplace_front:調用構造函數push_front:調用構造函數調用移動構造函數emplace_back:調用構造函數push_back:調用構造函數調用移動構造函數

可以看到,相比和它同功能的函數,emplace 系列函數都只調用了構造函數,而沒有調用移動構造函數,這無疑提高了代碼的運行效率。

總結

以上是生活随笔為你收集整理的栈堆的emplace和push_C++(STL):19---deque之删除和emplace用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看av大片 | 色婷婷婷婷色 | 欣赏asian国模裸体pics | 国产做爰全过程免费视频 | 涩涩五月天 | 91蜜桃 | 91成人在线播放 | 国产在线观看无码免费视频 | 国产视频福利在线 | 成人福利在线看 | 你操综合 | wwwxxxx欧美| 蜜桃91丨九色丨蝌蚪91桃色 | 日韩av视屏 | 久久免费视频一区二区 | 日韩在线观看视频一区二区三区 | 九一网站在线观看 | 伊人激情视频 | 精品国产乱子伦一区二区 | 国产深喉视频一区二区 | 欧美精品在线第一页 | 91精品久久久久久久99蜜桃 | 免费av大全 | 97精品视频在线观看 | 亚州激情视频 | 欧美性生活在线视频 | 免费观看91视频 | 国产一级理论片 | 国产福利精品一区 | 女上男下动态图 | 欧美午夜精品久久久久久孕妇 | 天天骑夜夜操 | 色在线视频 | 99久久毛片| 美女av网站 | 91在线一区| 一区二区三区毛片 | 无码人妻黑人中文字幕 | 手机看片日韩在线 | 免费黄网在线看 | 97国产在线| 操操综合 | 青青草午夜 | 999久久久久| 日韩精品人妻中文字幕有码 | 色吊丝中文字幕 | 午夜毛片在线 | 日本人和亚洲人zjzjhd | 国产有码在线观看 | a级片在线 | 美腿丝袜亚洲综合 | 国产成人h | 亚洲欧美日韩一区二区三区四区 | 波多野结衣视频在线 | 俄罗斯美女一级爱片 | 用力使劲高潮了888av | 在线观看第一页 | 成人做受视频试看60秒 | 亚洲一区二区蜜桃 | 欧美一区二区三区在线观看视频 | 国产嫩草视频 | 麻豆网站入口 | 日毛片 | av啊啊| 精品欧美一区二区久久久 | 91精品久久久久久久久 | 亚洲精品一区二区二区 | 国产91精品久久久久久久 | 免费看欧美成人a片无码 | 欧美不卡视频 | 在线免费三级 | 欧洲亚洲一区 | 啪啪网页 | 亚洲精品免费播放 | 国产精品二三区 | 成人在线超碰 | 涩涩成人网| 色射视频| 国产精品久久久久影院色老大 | 伊人tv | 韩日在线视频 | 亚洲精品久久久久久无码色欲四季 | 国产精品18久久久 | 日韩电影一二三区 | 超碰在线香蕉 | 爱情岛论坛自拍亚洲品质极速最新章 | 人人干人人爽 | 日本午夜在线 | 久久免费视频一区二区 | 影音先锋成人在线 | 亚洲逼 | 精品婷婷色一区二区三区蜜桃 | 奇米888一区二区三区 | 伊人超碰 | 国产午夜视频 | 人与禽性7777777 | 中文字幕日韩在线播放 | 91在线综合 | 国产精品久久久久久久妇 |