C++vector

1、vector 簡介

  • 作用:它能夠像容器一樣存放各種類型的對象,簡單地說,vector是一個能夠存放任意類型的動態數組,能夠增加和壓縮數據。

  • vector在C++標準模板庫中的部分內容,它是一個多功能的,能夠操作多種數據結構和算法的模板類和函數庫。

容器特點

  • 序列容器中的元素按嚴格的線性順序排序。各個元素按其在此序列中的位置進行訪問。
  • 甚至可以通過指針算術直接訪問序列中的任何元素,並在序列末尾提供相對快速的元素添加/刪除。
  • 容器使用分配器對象動態處理其存儲需求。

2、問題

2.1 賦值

將一個vector的內容賦值給另一個vector

  • 1、 聲明
    vector v1(v2);
  • 2、將兩個容器內的元素交換, 需要構建臨時對象,一個拷貝構造,兩次賦值操作。
    vector v1();v1.swap(v2);
  • 3、 將v2賦值給v1 但會清除掉v1以前的內容
    v1.assign(v2.begin(), v2.end());
  • 4、聲明迭代器
    vector::iterator it;
    for(it = v2.begin();it!=v2.end();++it){//遍歷v2,賦值給v1 效率慢
    v1.push_back(it); }
  • 5、 等號賦值,最簡單
    v1 = v2
  • 6、追加,將一個容器中的內容追加到另一個容器的後面:
    std::vector v1, v2 ;
    v1.insert(v1.end(), v2.begin(), v2.end());

2.2 刪除

  • iterator erase(iterator it):刪除向量中迭代器指向元素
  • iterator erase(iterator first,iterator last):刪除向量中[first,last)中元素
  • void pop_back():刪除向量中最後一個元素
  • void clear():清空向量中所有元素
// erasing from vector
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;

  // set some values (from 1 to 10)
  for (int i=1; i<=10; i++) myvector.push_back(i);

  // erase the 6th element
  myvector.erase (myvector.begin()+5);
  
  // erase the first 3 elements:
  myvector.erase (myvector.begin(),myvector.begin()+3);
  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); ++i)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';
  return 0;
}

2.3 技巧

  1. 如果你要表示的向量長度較長(需要爲向量內部保存很多數),容易導致內存泄漏,而且效率會很低;
  2. Vector作爲函數的參數或者返回值時,需要注意它的寫法:
    double Distance(vector&a, vector&b) 其中的“&”絕對不能少!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章