C++ vector使用實例

2022-01-10 CPP進階之旅


C++ vector使用實例


vector使用實例代碼演示:

以上代碼中需要注意的點:

在第 8 步中:erase()刪除元素後,返回值是一個迭代器,指向刪除元素的下一個元素;

在第8.1步中:vec.erase(iter);迭代器iter被erase以後,變成了一個「野迭代器」,類似野指針。這時候若直接對其進行++操作,而不是使用iter = vec.begin();重置迭代器iter,會發生未定義的錯誤;

在第8.2步中:代碼if ( *iter == 3 ) iter = vec.erase(iter);執行之後,當前迭代器iter實際已經指向下一個元素,若再執行++操作,實際上是指向了下一個元素的下一個元素;

在第8.3步中:在STL中remove()只是將待刪除元素之後的元素移動到vector的前端,而不是刪除。若要真正移除,需要搭配使用erase()。

在第 9 步中:clear()清除數據後,只是將vector的size置零,可是並不保證將capacity清零。因此clear()並不能釋放vector已經申請的內存。這時候可以使用vector<T>().swap(x)的方式完成釋放內存的操作。swap技法就是通過函數swap(),使得vector離開其自身的作用域,從而強制釋放vector所佔的內存空間;

相關焦點

  • C++打怪 之 vector
    使用起來較為複雜。注意在實際使用中,vector不當的用法可能會導致較為嚴重的問題:在使用vector變量時,必須對其初始化賦值才可以使用。若結構體含有vector成員,也必須先對此成員初始化,否則使用時可能會導致dump。在結構體有vector成員,不可用memset對此結構體進行清零,否則會導致內存洩漏。
  • C++ vector 使用注意事項
    (給CPP開發者加星標,提升C/C++技能)www.cnblogs.com/leehm/p/10929756.html1、初始化c++, size=end-start, capacity=finish-start很多時候在使用vector的時候,會看到size=capacity,這個時候直接添加元素到尾部,內存明顯是不夠的,此時會重新在別處分配一塊大小足夠有時候也有size<capacity, 這個時候就直接加在尾部了。
  • 【C++概念】---vector用法
    在c++中,vector是一個十分有用的容器,下面對這個容器做一下總結。
  • C++ vector詳解
    可以簡單的認為,vector是一個能夠存放任意類型的動態數組。接下來,請跟隨小編一起來複習一下吧。以下是正文前言本文mark了vector的一些接口,介紹了vector中的對內存和對象的管理詳解請見cppreference-vector。
  • C++逆向學習(二) vector
    現在的逆向C++題越來越多,經常上來就是一堆容器、標準模板庫,這個系列主要記錄這些方面的逆向學習心得本文主要介紹std::vector,因為逆向題中的C++代碼可能會故意寫的很繞,比如輸入一個數組,直接給vector賦值即可,但是也可以用稍微費解的方法連續push_back(),也算是一種混淆的手段,文章中的示例會逆向一些故意寫的繁瑣的程序vector內存布局
  • C++之vector知多少?
    要想使用 vector,需要引入相應的頭文件和名字空間:#include <vector>using std::vector;vector 本質上是一個模板。錯誤,類型不同使用列表初始化vectorC++11提供了一種更方便的用列表初始化vector的語法。
  • ​跟我學C++中級篇——STL的容器vector
    那麼實際分配就好說了,大於128的使用第一種,否則使用當前內存池中的鍊表遍歷,查找可用空閒找到後直接使用,否則*8,調用refill再次分配。釋放相對就簡單了,同樣分成兩部分,大於128位元組轉第一個調用free,否則加入回收空閒列表。template <class...
  • C++:STL基礎與數組vector
    存放內置數據類型容器:vector算法:for_each迭代器:vector<int>::iterator#include <iostream>#include<vector>using namespace std;void test(){ vector<string> v; v.push_back("該"); v.push_back("吃"); v.push_back("飯"); v.push_back("了"); v.push_back("吧"); vector<
  • 【高級編程】C++中vector使用詳解
    在C++中的詳細說明vector是C++標準模板庫中的部分內容,它是一個多功能的,能夠操作多種數據結構和算法的模板類和函數庫。vector之所以被認為是一個容器,是因為它能夠像容器一樣存放各種類型的對象,簡單地說,vector是一個能夠存放任意類型的動態數組,能夠增加和壓縮數據。2.
  • json for modern c++的使用
    json for modern c++是一款非常好用的json庫,具有語法直觀和使用簡單的特點,並且是用C++11標準編寫的,此外還支持STL和json容器之間的轉換,可謂集方便又強大。本文推薦給廣大C++程式設計師,相信學習完本文之後,在處理json時一定會得心應手。
  • 還不懂c++vector的用法,你憑什麼勇氣來的!
    今天給大家帶來一篇c++vector的介紹,難以置信這篇文章寫了我三天,不過總算整理完畢,現在分享給大家。模板類vector 和 array是數組的替代品。模板類vector 類似於string類,也是一種動態數組。 在 c++ 中,vector 是一個十分有用的容器。
  • C++之旅-vector
    編譯器根據模板創建類型或函數的過程稱為實例化,當使用模板時,需要指出編譯器應把類或函數實例化成何種類型。初始化與string類型一樣,vector也有很多種方式進行初始化:vector<int> v1;    vector<int> v2(v1);  vector<int> v2 = v1; vector<string> v3(3,"hello"); vector<string>
  • 6 個技巧,提升 C++11 的 vector 性能
    Bjarne Stoutsoup 有一句話 – 「一般情況下,如果你需要容器,就用 vector」。像我們這樣的普通人把這句話當作真理,只需要照樣去做。然而,就像其它工具一樣,vector 也只是個工具,它能提高效率,也能降低效率。這篇文章中我們可以看到 6 種優化使用 vector 的方法。
  • C++ vector用法詳解
    vector的使用頭文件#include <vector>創建vector對象std::vector<int> vec1;                                // 空的vector,數據類型為intstd::vector<int> vec2(4);
  • C++ 優先隊列priority_queue
    Container 還必須要支持隨機訪問,並且有 front()、push_back()、pop_back() 等函數這樣來看只有 std::vector、std::deque 滿足容器條件了,而優先隊列中使用的默認參數也是 std::vector。
  • 如何正確通過 C++ Primer 學習 C++?
    現在暑假已經被要求到學院搞項目,但是因為對編程只有概念上的認識,所以現在都是在自學C++。這幾天開始從頭看C++ primer,但是因為基礎實在薄弱,很多內容看很久都看不懂,上網查資料也是一片模糊。看了幾天之後,覺得我學習的方法有問題(我是每天都在練習他的習題)。我知道學習程序語言要多敲代碼,但是這個敲代碼不知道從哪裡入手,看書也不知道哪些是重點,哪些現在可以不看的。
  • C++隨機排序容器中的元素
    作者:apocelipes連結:https://www.cnblogs.com/apocelipes/p/10351335.html在各種程序語言中都提供了將容器元素隨機排序的shuffle方法,c++
  • C++ vector內存分配策略淺析
    容器內存管理,這種髒活累活全部交由vector管理。了解一下vector的內存管理策略,能夠更加充分的利用內存。2、vector內存分配策略vector是一個動態數組,它會根據元素的個數,適當的去申請內存。可以簡單的把vector理解為,其內部有一個void*指針,用於指向在堆上申請的空間。void*指向的空間用於存放vector元素。
  • C++STL(一)----string和vector
    #include<iostream>#include<algorithm>#include<vector>using namespace std;int main(){ int b[] = { 1,8,6,2,5,4,8,3,7 }; vector<int> qwe(b,b+9); vector<
  • C++ vector容器強制釋放內存
    換個話題,聊聊使用C++ STL vector容器時的一個內存管理問題。