参考链接:https://www.cnblogs.com/roucheng/p/cpprongqi.html
随机存取就是直接存取,可以通过下标直接访问的那种数据结构,与存储位置无关,例如数组。
非随机存取就是顺序存取了,不能通过下标访问了,只能按照存储顺序存取,与存储位置有关,例如链表。
总结
vector 是一段连续的内存块,而deque 是多个连续的内存块, list 是所有数据元素分开保存,可以是任何两个元素没有连续。
vector 的查询性能最好,并且在末端增加数据也很好,除非它重新申请内存段;适合高效地随机存储。
list 是一个链表,任何一个元素都可以是不连续的,但它都有两个指向上一元素和下一元素的指针。所以它对插入、删除元素性能是最好的,而查询性能非常差;适合 大量地插入和删除操作而不关心随机存取的需求。
deque 是介于两者之间,它兼顾了数组和链表的优点,它是分块的链表和多个数组的联合。所以它有被list 好的查询性能,有被vector 好的插入、删除性能。 如果你需要随即存取又关心两端数据的插入和删除,那么deque 是最佳之选。
接口的使用
1.list1.insert(list1.begin()+1,3,9): // list1: 7,5,2,4
The contents of list1 : 7 9 9 9 5 2 4
2.priority_queue<int,vector<int>, cmp>
cmp默认为less<int>, 是< , 大顶堆,从大到小输出
cmp 为greater<int>, 是> ,小顶堆,从小到大输出
cmp 自定义 重载>, 从小到大输出
struct Node{
int x;
int y;
};
struct cmp{
bool operator()(Node a, Node b){ //注意这里有括号operator()
if(a.x == b.x) return a.y > b.y;
else return a.x > b.x;
}
};
int main(){
priority_queue<Node,vector<Node>, cmp> q;
return 0;
}
tip:
该形式与sort中的cmp不同,重载>,那么利用sort(v.begin(), v.end(), cmp),输出就是从大到小的排序。
bool comp(const int &a,const int &b)
{
return a>b;
}