c++11容器新特性

對於所有容器(除了適配器stack, queue, priority_queue)

構造函數增加右值引用版本和初始化列表版本
賦值函數增加右值引用版本和初始化列表版本
增加cbegin, cend, crbegin, crend函數

對於串行容器vector, deque, list

assign函數增加初始化列表版本:
void assign(std::initializer_list<T> ilist);

insert函數增加初始化列表版本:
iterator insert(const_iterator pos, std::initializer_list<T> ilist);

增加emplace和emplace_back函數:
template <class... Args> 
iterator emplace(const_iterator pos, Args&&... args);
在pos之前插入一個新元素。該元素通過std::allocator_traits::construct構造,通常是使用placement new在原地構造。
參數arg...以std::forward<Args>(args)....的方式傳遞給構造函數。
template <class... Args>
void emplace_back(Args&&... args);

vector和deque增加shrink_to_fit函數:
void shrink_to_fit();

vector增加data函數:
T* data() noexcept;
const T* data() const noexcept;

deque和list新增emplace_front函數:
template <class... Args>
void emplace_front(Args&&... args);

對於set, map, multiset, multimap

4個容器均增加:
void insert(std::initializer_list<value_type> ilist);

template< class... Args >
std::pair<iterator,bool> emplace(Args&&... args);
如果key不存在於容器中,插入一個原地構造的新元素。如果容器中已存在key元素,可能會先進行構造再立即析構。

template <class... Args>
iterator emplace_hint(const_iterator hint, Args&&... args);
Inserts a new element into the container as close as possible to the position just before hint.

map, multimap新增:
T& at(const Key& key);
const T& at(const Key& key) const;
如果找不到元素,拋出std::out_of_range異常。

適配器stack, queue, priority_queue

構造函數和賦值函數增加move版本
增加emplace函數:
template <typename... Args>
void emplace(Args&&... args);

unordered_set, unordered_multiset, unordered_map, unordered_multimap

它們的接口與set, map基本相同,主要是多了一些哈希相關的方法:

template <typename Key, typename T,
    typename Hash = std::hash<Key>,
    typename KeyEqual = std::equal_to<Key>,
    typename Allocator = std::allocator<std::pair<const Key, T>>
> class unordered_map;

//返回哈希函數
hasher hash_function() const;
//返回比較key的函數
key_equal key_eq() const;

//返回bucket的數量
size_type bucket_count() const;
//返回系統可支持的bucket最大數量
size_type max_bucket_count() const;
//返回第n個bucket
local_iterator begin(size_type n);
const_local_iterator begin(size_type n) const;
const_local_iterator cbegin(size_type n) const;
local_iterator end(size_type n);
const_local_iterator end(size_type n) const;
const_local_iterator cend(size_type n) const;
//返回第n個bucket中元素數量
size_type bucket_size(size_type n) const;
//返回key所在的bucket
size_type bucket(const Key& key) const;

//返回平均每個bucket中的元素數量, 即size()/bucket_count()
float load_factor() const;
//獲取或設置最大load factor, 當load factor達到最大值時, 會自動增加bucket的數量
float max_load_factor() const;
void max_load_factor(float ml);
//將bucket數量設爲count, 並且進行rehash. 如果count導致load factor大於最大值,
//bucket數量將設置爲至少size()/max_load_factor(). 可以用rehash(0)來進行強制rehash.
void rehash(size_type count);
//使得容器至少能容納count的元素, 等價於調用rehash(std::ceil(count/max_load_factor()));
void reserve(size_type count);

array和forward_list

array做爲某些情形替換數組使用
forward_list是單向鏈表, list可完全覆蓋其功能

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