當vector使用erase陣列長度是否改變

2021-03-03 21:28:40 字數 1730 閱讀 5468

1樓:匿名使用者

要改變,陣列元素的位置也要改變 。

2樓:兔子和小強

vector的erase方法會改變陣列長度,

不過要注意的是通用演算法remove將不改變容器大小

3樓:匿名使用者

vector的容器大小用max_size來看嗎?

c++中的erase操作

4樓:匿名使用者

if(isupper(*iter))

問題在這裡 iter = s.erase(iter);

注意std::string 實際上裡面是個動態 char迭代器內部的內容實際是個char*

那麼當erase後 陣列長度發生變化

根據動態陣列的概念 是不是會發生

char* new_p = new char[new_length];

memcpy(new_p, old_p, new_length);

那麼原來的指標還能用嗎??

所以你這個功能應該使用 std::remove_if同樣的 vector也不能使用這樣的操作

但是類似操作 list就可以。

5樓:暖萱紫菱

erase()函式的功能是用來刪除容器中的元素。

函式原型:

iterator erase(iterator where);

iterator erase(iterator first,iterator last);

basic_string& erase(size_type p0=0,size_type n=np);

刪除某個容器裡的某個元素:c.erase(t);

連結串列容器以list為例,執行container.erase(it)。

list::iterator it;

for (it = lt.begin(); it != lt.end(); )

6樓:it孤鶩

試試這個

# include

# include

# include

using namespace std;

int main()

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

7樓:匿名使用者

沒有重新分配。但是後續的元素被往前移動,因此被刪除的元素之後的迭代器會失效。例如,下面的**在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在交換之後,容量和大小一致。

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

手機可以當u盤使用嗎,手機可以當U盤使用嗎?

手機完全是可以的,你的手機在你的電腦上面沒有安裝驅動,在學校估計也不用安裝,如果學校的電腦是98的,那就要安裝了 另外wps的檔案word是不能夠開啟的,必須安裝wps才可以。不過word的檔案wps是可以開啟的 能當u盤用。但是你學校機上沒有這個wps軟體。你帶過去怎麼開啟哪個檔案啊?手機直接插u...

字母a可以表示有理數,當a是正數時,a a當a是0時,a 0當a是負數時,a為a的相反數 a,即

則 1 若m是負數,則 m m 若a b是負數,則 a b b a 2 如圖所示,求a.b兩數回的絕對值。a a b b 3 若 a a,a是非正數答望採納 請根據以上敘述,解答下列各題 1 若m是負數,則 m m 若a b是負數,則 a b b a 2 如圖所示,求a.b兩數的絕對值。向左轉 向右...

修家譜,蒐集和使用要注意,修家譜,蒐集和使用資料要注意

一 蒐集資料既來要全自面,也要突出重點 資料貴在積累,貴在詳盡,應當全面蒐集資料,使家譜真正成為一家之全史。但蒐集中也要注意突出重點。二.資料的蒐集工作與整理工作相結合 蒐集起來的資料,廣 數量多 內容龐雜,是編修家譜的基礎材料,但同時又雜亂無章,必須進行科學的整理。三 資料蒐集工作與考證和鑑別工作...