CSTL刪除vector中指定元素

時間 2021-09-04 02:32:22

1樓:匿名使用者

心情好+沒事做

這很難嗎?不就是用遊標取出然後做一個value比較嗎?有什麼糾結的?

for (std::vector::iterator iter1 = dvcardreject.

begin(); iter1 != dvcardreject.end(); ++iter1)

else }}

2樓:匿名使用者

class function

bool operator() (tcards &temp)

};for(int i=0;i

在vector中,怎樣刪除某個指定值的元素

3樓:安徽電信網上營業廳

刪除baivector指定位du置的zhi元素,參dao考如專下:屬

#include

#include

using namespace std;

int main(int argc, char** argv)printf("10:%d\n",vec[10]);

printf("size:%d\n",vec.size());

printf("**********************************\n");

std::vector::iterator it = vec.begin()+10;

vec.erase(it);

printf("10:%d\n",vec[10]);

printf("size:%d\n",vec.size());

return 0;}

c++ stl vector erase函式中,有沒有重新分配記憶體?

4樓:匿名使用者

沒有重新分配。但是後續的元素被往前移動,因此被刪除的元素之後的迭代器會失效。例如,下面的**在debug模式下將會崩潰,在release模式下正常執行而且可以看到陣列的地址並沒有改變。

#include

#include

int main();

auto p = v.end() - 2;

std::cout << &v[0] << "\t" << *p << "\t" << &*p << "\n";

v.erase(v.begin() + 2);

std::cout << &v[0] << "\t" << *p << "\t" << &*p << "\n";

return 0;

}v.swap(vector(v));將v複製到新的向量中(這個向量的容量正好和v的大小一樣),然後與v進行交換。因為這是一個區域性變數,所以這句話結束時會將從v處獲得的記憶體釋放。

同時,v在交換之後,容量和大小一致。

建議你看一下源**,或者單步除錯看看具體的執行過程。

c++ stl 中 remove 和 erase 的區別

5樓:匿名使用者

c++的stl通過iterator將container和algorithm分離,並通過functor提供高可定製性。iterator可以看作是一種契約,algorithm對iterator進行操作,algorithm很難對container進行直接操作,這是因為algorithm對container所知甚少,一段**,若未利用操作物件所知全部資訊,將難以達到效能之極,並伴隨其它種種折中現象。當然,這種“未知性”是必須的——algorithm對於真正的操作物件container不能做出太多假設,若假設過多,何來一個algorithm可以作用若干不同container的妙舉,stl強大威力也將受損不少。

囉嗦幾句,開個小頭,轉入正題。 先給出幾個關於stl中erase和remove(remove_if等,下稱remove類函式)的事實,小小複習:

erase一般作為一個container的成員函式,是真正刪除的元素,是物理上的刪除

作為演算法部分的remove類函式,是邏輯上的刪除,將被刪除的元素移動到容器末尾,然後返回新的末尾,此時容器的size不變化

部分容器提供remove類成員函式,那麼代表的是真正物理意義上的刪除元素

如果該容器是vector、string或者deque,使用erase-remove idiom或者erase-remove_if idiom

如果該容器是list,使用list::remove或者list:remove_if成員函式

如果該容器是一個associative container,使用asso_con::erase成員函式或者remove_copy_if結合swap等方式

有一些比較特殊的容器具現,比如vector等,暫不考慮。

6樓:杜爺1號

c++ stl中的remove和erase函式曾經讓我迷惑,同樣都是刪除,兩者有什麼區別呢?

vector中的remove的作用是將等於value的元素放到vector的尾部,

vector中erase的作用是刪除掉某個位置position或一段區域(begin, end)中的元素,減少其size

list容器中的remove 成員函式,原型是void remove (const value_type& val);

他的作用是刪除list中值與val相同的節點,釋放該節點的資源。

而list容器中的erase成員函式,原型是iterator erase (iterator position);

作用是刪除position位置的節點。這也是與remove不同的地方。

考慮到list::erase是與位置有關,故erase還存在api: iterator erase (iterator first, iterator last);

對於set來說,只有erase api,沒有remove api。 erase 的作用是把符合要求的元素都刪掉。

(1) void erase (iterator position);

(2) size_type erase (const value_type& val);

(3) void erase (iterator first, iterator last);

綜上所述,erase一般是要釋放資源,真正刪除元素的,

而remove主要用在vector中,用於將不符合要求的元素移到容器尾部,而並不刪除不符合要求的元素。

php刪除陣列中指定的元素,php如何刪除陣列中的某個元素用法總結

array splice函式可以刪除陣列中的元素 只是該函式的功能之一 array splice用法如下 array splice 把陣列中的一部分去掉並用其它值取代 array array splice array input,int offset int length 0 mixed repla...

c語言刪除字串中指定字元,C語言刪除字串中指定字元

加百列 一 問題描述 從鍵盤輸入一個字串給str和一個字元給c,刪除str中的所有字元c並輸出刪除後的字串str。1 輸入 第一行是一個字串 第二行是一個字元。2 輸出 刪除指定字元後的字串。二 設計思路 1 同插入問題,定義兩個字元陣列a,b。以及標誌刪除位置的int型pos。2 用gets函式輸...

python刪除字串中指定位置字元

最愛塵涑 字串的話,你可以把他當作列表處理 str hello world 如果是想去掉第乙個字母 o 並且知道是第5個字元,index 41.使用分片 new str str 4 str 5 2.迴圈讀取new str join str i for i in range len str if i ...