容器與算法(順序容器)

容器常見知識點一(順序容器)

順序容器

容器內元素的約束

  • 容器元素類型必須支持賦值運算
  • 元素類型的對象必須可以複製
  • 如果容器存儲類類型的對象,那麼只有當其元素類型提供默認構造函數時,容器才能使用這種構造函數。

容器常用操作

  • 迭代器,list容器既不支持算術運算,也不支持關係運算
  • 在順序容器中添加元素:push_front(t) 只適用於list和deque
  • insert(iter,t) 返回指向新添加元素的迭代器
  • 在vector容器中添加元素可能會導致整個容器重新加載,這樣的話,該容器涉及的所有迭代器都會失效。當循環將元素插入到vecotr或deque容器中時,程序必須確保迭代器每次循環後都得到更新。
  • 避免存儲end操作返回的迭代器,在容器的任何位置插入任何元素都會使該迭代器失效。
  • 在vector或deque容器上做resize操作,有可能會使其所有的迭代器都失效。
  • c[n],c.at(n)只適用於vector和deque
  • pop_front和pop_back函數的返回值並不是刪除的元素值,而是void,要獲得刪除的元素值,必須在刪除元素之前調用,front或back
  • erase、pop_front(只適用於list和deque)和pop_back,對於vector容器,指向刪除點後的元素的迭代器通常會失效。而對於deque容器,如果刪除時不包含第一個元素或最後一個元素,那麼該deque容器相關的所有迭代器都會失效。
  • 與賦值相關的操作符都作用於整個容器。 除swap外,其他都可以用erase和insert完成。swap操作不會使迭代器失效。
  • swap操作可以節省刪除元素的成本
  • 如果在不同(或相同)類型的容器內,元素內省不相同,但互相兼容,則其賦值運算必須使用assign函數。例如:可以通過assign操作實現vector容器中一段char*類型的元素賦值給string類型的list容器
  • 容器選用,對於大部分應用,使用vector容器是最好的。除非有充分的理由使用其他容器。

String

  • string提供與vector容器相同的操作,除了他不支持棧方式操作容器,在string類型中不能使用front,back和pop_back.
  • 只適用於string類型的操作
    • substr函數,返回當前string對象的子串
    • append和replace函數,用於修改string對象
    • 一系列find函數,用於查找string對象

容器適配器

  • 默認的stack和queue都是基於deque容器實現,而priority_queue則在vector容器上實現。在創建適配器時,通過將順序容器指定爲適配器的第二個類型實參,可以覆蓋其關聯的基礎容器類型。

      stack<stirng, vetor<string> > strStk;
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章