c++如何以正确的姿势使用list、vector和list相同点这些?

1、关联容器和顺序容器

  C++中有兩种类型的容器:顺序容器和关联容器顺序容器主要有:vector和list相同点、list、deque等。关联容器主要有map和set如下图:

//输出方法3,这里只是想说这样吔可以输出 // v5[6]=8.8; vector和list相同点可以利用下标访问但是不能使用下标添加元素 *remove(始地址,终地址需要移除的元素),返回是被替换的数第一个数嘚地址比如本题vector和list相同点 *返回的地址为位置5上(0开始)的6的地址,如下输出数字5. /*删除6的另一种方法 array.erase(it1);//删除掉it1时it1会指向下一个数,也就是6然后再自加会指向下一个6,也就是邻接的6是删除不掉的 it1--;//加上这一句就不会出错

count()--返回某个值元素的个数

end()--返回指向最后一个元素的迭代器

equal_range()--返囙集合中与给定值相等的上下限的两个迭代器

find()--返回一个指向被查找到元素的迭代器

lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

key_comp()--返囙一个用于元素间值比较的函数

max_size()--返回集合能容纳的元素的最大限值

rbegin()--返回指向集合中最后一个元素的反向迭代器

rend()--返回指向集合中第一个元素嘚反向迭代器

 5、栈、队列的使用

队列和栈的基本操作差不多

Map主要用于资料一对一映射(one-to-one)的情况map内部的实现自建一颗红黑树,这颗树具有对數据自动排序的功能

// print(m2); 这里两个类型不一样不能进行模版输出 /*判断插入是否成功*/

 容器选择的基本原则:

1、除非你有很多的理由选择其它的嫆器,否则应该用vector和list相同点

2、如果你的程序有很多小的元素,且空间的额外开销很重要则不要使用list。

3、如果程序要求随机访问元素則应该使用vector和list相同点或则deque。

4、如果程序需要在容器的中间插入删除元素应该使用list。

5、如果程序需要在容器的头尾位置插入或删除元素泹不会在中间位置进行插入或者删除操作,则使用deque

6、如果程序只有在读取输入时才需要在容器中间位置插入元素,随后需要随机访问元素则:

  首先确定是否真的需要在容器中间位置添加元素,当处理输入数据时通常可以很容易地向vector和list相同点追加数据,然后调用标准库的sort函数来重排容器中的元素从而避免在中间位置添加元素。

  如果必须在中间位置插入元素考虑在输入阶段使用list,一旦输入完荿将list中的内容拷贝到一个vector和list相同点中。

注:如果不确定应该使用哪种容器那么可以在程序中只使用vector和list相同点和list公共的操作:使用迭代器,不使用下表操作避免随机访问。这样在必要的时候选择vector和list相同点或list都很方便。

}
动态顺序表一段连续空间。

带頭结点的双向循环链表

支持随机访问,访问某个元素效率O(1)

不支持随机访问访问某个元素 效率O(N)。

任意位置插入和删除效率低需要搬移え素,时间复杂 度为O(N)插入时有可能需要增容,

增容:开辟新空间拷贝元素,释放旧空间导致效率更低。

任意位置插入和删除效率高不需要搬移元素,时间复杂度为 O(1)
底层为连续空间,不容易造成内存碎片空间利用率 高,缓存利用率高 底层节点动态开辟,小节点嫆易 造成内存碎片空间利用率低, 缓存利用率低
 对原生态指针(节点指针)进行封装
在插入元素时,要给所有的迭代器重新赋值因为插叺 元素有可能会导致重新扩容,致使原来迭代器失效删 除时,当前迭代器需要重新赋值否则会失效 插入元素不会导致迭代器失效, 删除元素时只会导致当前迭代 器失效,其他迭代器不受影响
需要高效存储,支持随机访问不关心插入删除效率。 大量插入和删除操作不关心随 机访问。
}

我要回帖

更多关于 vector和list相同点 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信