标准容器的复杂性保证是什么?

显然——标准集装箱提供了某种形式的保证。

什么类型的保证以及不同类型的容器之间到底有什么区别?

SGI 页面工作(关于 STL)我想到了这个:

Container Types:
================
Container:
Forward Container
Reverse Container
Random Access Container
Sequence
Front Insert Sequence
Back  Insert Sequence
Associative Container
Simple   Associative Container
Pair     Associative Container
Sorted   Associative Container
Multiple Associative Container


Container Types mapped to Standard Containers
=============================================


std::vector:    Sequence    Back        Sequence                    Forward/Reverse/Random Container
std::deque:     Sequence    Front/Back  Sequence                    Forward/Reverse/Random Container
std::list:      Sequence    Front/Back  Sequence                    Forward/Reverse Container
std::set:       Sorted/Simple/Unique    Associative Container       Forward Container
std::map:       Sorted/Pair/Unique      Associative Container       Forward Container
std::multiset:  Sorted/Simple/Multiple  Associative Container       Forward Container
std::multimap:  Sorted/Pair/Multiple    Associative Container       Forward Container




Container Guarantees:
=====================


Simp
or
For   Rev  Rand        Front  Back  Assoc        Sort   Mult
Cont: Cont: Cont Cont: Sequ: Sequ:  Sequ: Cont:        Cont:  Cont:
Copy    Const:      O(n)
Fill    Const:                             O(n)
begin()             O(1)
end()               O(1)
rbegin()                        O(1)
rend()                          O(1)
front()                                    O(1)
push_front()                                     O(1)
pop_front()                                      O(1)
push_back()                                             O(1)
pop_back()                                              O(1)
Insert()                                                                          O(ln(n))
Insert: fill                               O(n)
Insert: range                              O(n)                                   O(kln(n)+n)
size()              O(1)
swap()              O(1)
erase key                                                     O(ln(n))
erase element                                                 O(1)
erase range                                                   O(ln(n)+S)
count()                                                       O(log(n)+k)
find()                                                        O(ln(n))
equal range                                                   O(ln(n))
Lower Bound/Upper Bound                                                    O(ln(n))
Equality                  O(n)
InEquality                O(n)
Element Access                       O(1)
145967 次浏览

我不知道有什么东西像一个单一的表,可以让您一目了然地比较所有这些(我不确定这样的表是否可行)。

当然,ISO 标准文档详细列举了复杂性要求,有时是在各种可读性较高的表格中,有时是在每种特定方法的可读性较差的项目符号中。

http://www.cplusplus.com/reference/stl/的 STL 库引用也提供了适当的复杂性要求。

我找到了不错的资源 标准 C + + 容器 。也许这就是你们所有人都在寻找的。

矢量

建筑工人

vector<T> v;              Make an empty vector.                                     O(1)
vector<T> v(n);           Make a vector with N elements.                            O(n)
vector<T> v(n, value);    Make a vector with N elements, initialized to value.      O(n)
vector<T> v(begin, end);  Make a vector and copy the elements from begin to end.    O(n)

访问者

v[i]          Return (or set) the I'th element.                        O(1)
v.at(i)       Return (or set) the I'th element, with bounds checking.  O(1)
v.size()      Return current number of elements.                       O(1)
v.empty()     Return true if vector is empty.                          O(1)
v.begin()     Return random access iterator to start.                  O(1)
v.end()       Return random access iterator to end.                    O(1)
v.front()     Return the first element.                                O(1)
v.back()      Return the last element.                                 O(1)
v.capacity()  Return maximum number of elements.                       O(1)

修饰语

v.push_back(value)         Add value to end.                                                O(1) (amortized)
v.insert(iterator, value)  Insert value at the position indexed by iterator.                O(n)
v.pop_back()               Remove value from end.                                           O(1)
v.assign(begin, end)       Clear the container and copy in the elements from begin to end.  O(n)
v.erase(iterator)          Erase value indexed by iterator.                                 O(n)
v.erase(begin, end)        Erase the elements from begin to end.                            O(n)

对于其他容器,请参考该页。

另一个快速查找表可在此 Github 页面

注意: 这里没有考虑到所有的容器,比如 unorder _ map 等等,但是仍然非常值得一看。它只是 这个的一个更干净的版本