deque插入 刪除元素

2021-10-07 15:44:06 字數 3800 閱讀 2696

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()

//呼叫pop_back()移除容器尾部的乙個資料。

d.pop_back(); //{}

//呼叫push_front()向容器頭部新增資料。

d.push_front(2);//

//呼叫pop_front()移除容器頭部的乙個資料。

d.pop_front();//{}

//呼叫 emplace 系列函式,向容器中直接生成資料。

d.emplace_back(2); //

d.emplace_front(3); //

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

d.emplace(d.begin() + 1, 4);//

for (auto i : d)

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

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

d.erase(d.begin());//

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()

;//第一種格式用法

d.insert(d.begin() + 1, 3);//

//第二種格式用法

d.insert(d.end(), 2, 5);//

//第三種格式用法

std::arraytest;

d.insert(d.end(), test.begin(), test.end());//

//第四種格式用法

d.insert(d.end(), );//

for (int i = 0; i < d.size(); 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

testdemo(const testdemo& other) :num(other.num)

testdemo(testdemo&& other) :num(other.num)

testdemo& operator=(const testdemo& other);

private:

int num;

};testdemo& testdemo::operator=(const testdemo& other)

int main()

執行結果為:

emplace:

呼叫建構函式

insert:

呼叫建構函式

呼叫移動建構函式

emplace_front:

呼叫建構函式

push_front:

呼叫建構函式

呼叫移動建構函式

emplace_back:

呼叫建構函式

push_back:

呼叫建構函式

呼叫移動建構函式

可以看到,相比和它同功能的函式,emplace 系列函式都只呼叫了建構函式,而沒有呼叫移動建構函式,這無疑提高了**的執行效率。

numpy刪除,插入,增加元素

刪除 numpy.delete arr,obj,axis none arr 輸入向量 obj 表明哪乙個子向量應該被移除。可以為整數或乙個int型的向量 axis 表明刪除哪個軸的子向量,若預設,則返回乙個被拉平的向量 a np.array np.arange 12 reshape 3,4 arra...

JQ 元素建立插入刪除篇

建立元素,傳入htmlstring 用於建立元素 var jqdiv 設定所需要的屬性或者樣式 jqdiv.css jqdiv.prop id div1 插入到當前文件中 body jqdiv var jqdiv html 這是div1 css prop id div1 body jqdiv b的 ...

鍊錶元素的刪除 插入

需要判斷要刪除元素在鍊錶中的位置 重要 用鍊錶的結構建立一條公交線路的站點資訊,從鍵盤依次輸入從起點到終點的各站站名,以單個 字元作為輸入結束,統計站的數量並輸出這些站點 include include malloc所需標頭檔案 include memset所需標頭檔案 struct station...