template class vector;
成員函式舉例:注意其中的記憶體管理
1、list的節點(node)void vector::insert(iterator position, size_type n, const t& x)
else
} else
# ifdef __stl_use_exceptions
catch(...)
# endif /* __stl_use_exceptions */
// 以㆘清除並釋放舊的vector
destroy(start, finish); //全域性函式
deallocate();
// 以㆘調整水位標記
start = new_start;
finish = new_finish;
end_of_storage = new_start + len;
} }}
template struct __list_node;
2、list的迭代器
3、list——實現為乙個環狀雙向列表templatestruct __list_iterator
__list_iterator() {}
__list_iterator(const iterator& x) : node(x.node) {}
bool operator==(const self& x) const
bool operator!=(const self& x) const
// 以㆘對迭代器取值(dereference),取的是節點的資料值。
reference operator*() const
// 以㆘是迭代器的成員訪問(member access)運運算元的標準作法。
pointer operator->() const
// 對迭代器累加1,就是前進㆒個節點
self& operator++()
self operator++(int)
// 對迭代器遞減1,就是後退㆒個節點
self& operator--()
self operator--(int)
};
4、元素操作template // 預設使用alloc 為配置器
class list
iterator end()
};
insert, push_front, push_back, erase, pop_front, pop_back, clear, remove, unique, splice, merge, reverse, sort
list不能使用stl演算法的sort(),必須使用自己的成員函式sort,因為stl演算法sort()只接受randomaccessiterator。template void list::unique()
}
雖然deque也提供random access iterator,但是並不是普通指標,所以盡可能使用vector。對deque進行的排序操作,為了最高效率,可將deque先完整複製到乙個vector上,將vector排序後(利用stl sort演算法),再複製會deque。// 將[first,last) 內的所有元素搬移到position 之前。它是spice(), reserve(), merge()的基礎。
void transfer(iterator position, iterator first, iterator last)
// 「本函式採用quick sort」。這是書中原話,我覺得更像是歸併排序的迭代形式。
template void list::sort()
carry.swap(counter[i]);
if (i == fill) ++fill;
} for (int i = 1; i < fill; ++i)
counter[i].merge(counter[i-1]);
swap(counter[fill-1]);
}
1、deque的中控器
deque採用一塊所謂的map(不是stl的map容器),為一小塊連續空間,其中每個元素都是指標,指向較大的連續線性空間(緩衝器),緩衝區才是deque的儲存空間主體。
2、deque的迭代器
template struct __deque_iterator
// 未繼承std::iterator,所以必須自行撰寫五個必要的迭代器相應型別(第3章)
typedef random_access_iterator_tag iterator_category;
typedef t value_type;
typedef ptr pointer;
typedef ref reference;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef t** map_pointer;
typedef __deque_iterator self;
// 保持與容器的聯結
t* cur; // 此迭代器所指之緩衝區㆗的現行(current)元素
t* first; // 此迭代器所指之緩衝區的頭
t* last; // 此迭代器所指之緩衝區的尾(含備用空間)
map_pointer node; // 指向管控㆗心
...};
3、deque的資料結構// 以下實現隨機訪問。迭代器可以直接跳躍n個距離。
self& operator+=(difference_type n)
return *this;
}// 參考 more effective c++, item22: consider using op= instead of
// stand-alone op. a = b + n;
self operator+(difference_type n) const
STL學習筆記 4 序列式容器之vector
常見的資料結構 array陣列,list鍊錶,tree樹,stack棧,queue佇列,hash table雜湊表,set集合,map對映 根據資料在容器中的排列分為 序列式sequence和關聯式associative。序列式容器之vector array是靜態空間,一旦配置則無法改變 vecto...
STL原始碼分析3 序列式容器
喜歡這篇文章嗎?喜歡的話去看博主的置頂部落格,即可依據分類找到此文章的原版得到更好的體驗,title stl原始碼分析3 序列式容器 mathjax true date 2020 03 24 20 39 33 categories c 筆記,stl原始碼分析 tags c 筆記,stl原始碼分析 k...
C 學習篇 8 序列式容器list
list 個人認為list相當於資料結構裡面的雙向鍊錶,但是實現功能更加複雜。它的好處是每次插入或刪除元素時,就要配置或釋放乙個元素空間,因此,對空間不會產生浪費,對於任何位置的元素插入或刪除是都是o 1 的時間複雜度。list節點 list迭代器 注意 在list中使用erase只會使得當前迭代器...