1、vector的下標操作不會添加元素,只能針對已經存在的元素操作。
2、map的下標操作具有副作用,key不存在,會在map中添加一個具有該key的新元素,新元素的value使用默認構造方法。
3、為什么要這樣設計?
vector是基於連續內存的容器,在尾部操作效率高,使用push_back添加元素,使用下標必須保證下表存在元素。
map是基於節點的容器,元素有序。使用下標操作,第一步是查找key是否存在,map的內部實現是二叉樹(AVL樹或者紅黑樹),采用二分查找。不管是否存在key,查找key 的時候,也已經確定了key的位置。因此,如果不存在key,干脆添加一個,反正已經知道添加位置,對於基於節點的容器,在知道插入位置的情況下,插入效率為常數時間。