【C++】vector和list的区别

[复制链接]
发表于 2026-1-24 05:53:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1. vector


  • vector和数据类似,拥有一段连续的内存空间,而且起始地点稳固
  • vector能高效的举行随机存取,时间复杂度为o(1)
  • 由于vector内存空间是连续的,以是在举行插入和删除使用时,会造成内存块的拷贝,时间复杂度为o(n)
  • 当数组中内存空间不敷时,会重新申请一块内存空间并举行内存拷贝
2. list


  • list是由双向链表实现的,因此内存空间不是连续的
  • 只能通过指针访问数据,以是list的随机存取服从非常低,时间复杂度为o(n)
  • 但是由于链表的特点,插入和删除比力高效
3. vector和list的区别


  • vector拥有一段连续的内存空间,能很好的支持随机存取
  • list的内存空间是不连续的,不支持随机访问
4. 代码
  1. #include<iostream>
  2. #include<vector>
  3. #include<list>
  4. using namespace std;
  5. int main()
  6. {
  7.     vector<int> v;
  8.     list<int> l;
  9.    
  10.         //往v和l中分别添加元素
  11.     for(int i=0; i<8; i++)
  12.     {
  13.         v.push_back(i);
  14.         l.push_back(i);
  15.     }
  16.    
  17.     cout << "v[2]=" << v[2] << endl;
  18.     //cout << "l[2]=" << l[2] << endl;  //编译错误,list没有重载`[]`
  19.    
  20.     cout << (v.begin()<v.end()) << endl;
  21.     //cout << (l.begin() < l.end()) << endl; /编译错误,list::iterator没有重载 `<` 和 `>`
  22.    
  23.     cout << *(v.begin()+1) << endl;
  24.     //cout << *(l.begin()+1) << endl; //编译错误,list::iterator没有重载`+`
  25.    
  26.     vector<int>::iterator itv = v.begin();
  27.     list<int>::iterator itl = l.begin();
  28.     itv = itv + 2;
  29.     //itl = itl + 2; //编译错误,list::iterator没有重载+
  30.    
  31.     itv++;
  32.     itl++;        //list::iterator中重载了++,只能使用++进行迭代访问。
  33.    
  34.     cout << *itv << endl;
  35.     cout << *itl << endl;
  36.    
  37.     getchar();
  38.     return 0;
  39. }
复制代码
5. 总结


  • 如果须要高效的存取,不在乎插入和删除的服从,使用vector
  • 如果须要大量的插入和删除,不须要随机存取,则使用list
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表