[C++]vector容器和deque容器总结

vector基本概念

功能:

  • vector数据结构和数组非常相似,也称为单端数组。

vector和普通数组区别:

  • 不同之处在于数组是静态空间,而vector空间是动态分配的,基本步揍为:建立空间->填充数据->重建更大空间->复制原空间数据->删除原空间->添加新数据,如此反复,保证vector始终是一块独立的连续内存空间。

(1)构造函数

1 vector<T>();//默认构造函数
2 
3 vector<T>(v.begin(),v.end());//将v[begin(),end()]中的元素拷贝给自身
4 
5 vector<T>(n,elem);//构造函数将n个元素elem拷贝给自身
6 
7 vector<T>(v);//拷贝构造

(2)赋值操作

利用=或assign函数进行赋值

1     vector<int> v;
2     for (int i = 0; i < 10; i++) {
3         v.push_back(i);//尾插插入元素
4     }
5     vector<int> v1 = v;//利用=赋值
6     vector<int> v2;
7     v2.assign(v1.begin(),v1.end());//利用assign函数赋值,传入一个区间
8     vector<int> v3;
9     v3.assign(5, 100);//利用assign函数赋值,传入n个elem,assign(n,elem);

(3)容量与大小

1     vector<int> v;
2     v.empty();//判空函数,返回一个布尔值
3     v.capacity();//容量函数,返回vector容器中现有开辟空间
4     v.size();//大小函数,返回vector容器中元素的个数
5     v.reserve(20000);//直接指定vector容器的容量,可以减少vector动态分配内存的次数,从而提高效率
6     v.resize(3);//重新指定容器的元素个数,若容器变长则以默认值0填充,若变短,超出元素则被删除
7     v.resize(10,100);//重新指定容器的元素个数,若容器变长则以默认值100填充,若变短,超出元素则被删除

(4)插入与删除

 1     vector<int> v;
 2     v.assign(3, 100);//赋值10个元素
 3     //100 100 100
 4     
 5     v.push_back(10);//尾插法插入元素
 6     //100 100 100 10
 7     
 8     v.pop_back();//删除最后一个元素
 9     //100 100 100
10 
11     v.insert(v.begin() + 1, 5);//在迭代器指向位置插入元素
12     //100 5 100 100
13 
14     v.insert(v.begin() + 1, 3,6);//在迭代器指向位置插入n个elem
15     //100 6 6 6 5 100 100
16 
17     v.erase(v.begin());//删除迭代器指向位置的元素
18     v.erase(v.begin() + 1, v.end());//删除迭代器区间内的元素,区间左闭右开
19     v.clear();//清空

(5)数据存取

利用at()函数或[]下标的形式来访问数据。其中front()函数和back()函数分别返回容器的第一个元素和最后一个元素

deque容器

功能:

  • 双端数组,可以对头部进行插入删除。 

deque和vector的区别:

  • vector对于头部的插入删除效率较低,数据量越大,效率越低。
  • deque相对而言对于头部的插入删除就很方便。
  • vector访问元素时的速度要高于deque,这和俩者内部实现有关。
  • deque没有容量这一说。

deque内部工作原理:

从deque内部有个中控器,维护每段缓冲区中的内存,缓冲区中存放真实数据。中控器维护的时每个缓冲区的地址,使得使用时像一片连续的空间。原理个人认为像计算机组成原理中的分页。内部结构简图如下:[C++]vector容器和deque容器总结

deque操作:

基本和vector一致,此处就不再叙述。

 

原文链接: https://www.cnblogs.com/jhw9/p/13190004.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    [C++]vector容器和deque容器总结

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/358375

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午12:16
下一篇 2023年3月2日 下午12:17

相关推荐