C++ STL:vector和list

C++:智能指针unique_ptr与vector;shared_ptr与vector 文章目录错误分析 错误 class abc { public: abc(){cout<<"construct"<<endl;} ~abc(){cout<<"destroy"<<endl;} }; int main() { vector<unique_ptr<abc>> v_s_a; unique_ptr<abc> u_s_b (new abc); v_s_a.push_back(u_s_b); 阅读详情

STL 描述:

C++标准模块库是一个提供了公共编程数据结构和函数的模板类集合,如双连接表(list),配对数组(map),可扩展数组(vector),大串的存储操作(rope)等。STL库可以从http://www.sgi.com/tech/stl/ 获取。


STL可以分为以下几类:

  • 容器类:
    • 顺序容器:
      • vector:动态数组变量,结构体或对象。可以插入在末尾插入数据,支持快速随机访问。
      • deque: 支持在数组的前面和后面插入元素,双端队列。
      • list: 基于链表的变量、结构或对象。可以在任何地方插入和删除元素。支持快速插入、删除。
    • 关联容器:
      • set (不允许有重复元素在set中), multiset (可以有重复元素): 平衡二叉树结构有序的数据的集合,能快速搜索。
      • map (唯一keys), multimap (允许重复keys): 关联键 - 值对的平衡二叉树结构。
    • 容器适配器:
      • stack LIFO 栈
      • queue FIFO 队列
      • priority_queue 返回最高优先级的元素,优先级队列
    • 字符串:
      • string:字符串及其操作
      • rope: 字符串存储和操作
    • bitset: 直观的存储位和操作位。
  • 泛型算法:
    • 迭代器iterator: 代表容器中的位置,一个迭代器定义为一个容器类类型。
    • 算法algorithm: 提供查找,计数,搜索容器中的元素的类。
    • 智能指针auto_ptr: 关联内存指针避免内存泄露的类。

STL vector:

   初始化:
      vector<int> ivec;
      vector<int > vec2(ivec);
     vector c (iter.begin,iter.end);
      vecotr<int > c(5,0);
       vector<int> c(5);

         example 1: 用vector存储STL strings,并且用三种方法类访问vector中的元素:
#include <iostream>
#include <vector>
#include <string>

using namespace std;

main()
{
   vector<string> SS;

   SS.push_back("The number is 10");
   SS.push_back("The number is 20");
   SS.push_back("The number is 30");

   cout << "Loop by index:" << endl;

   int ii;
   for(ii=0; ii < SS.size(); ii++) //第一种方法访问
   {
      cout << SS[ii] << endl;
   }

   cout << endl << "Constant Iterator:" << endl;

   vector<string>::const_iterator cii;
   for(cii=SS.begin(); cii!=SS.end(); cii++)//第二种方法
   {
      cout << *cii << endl;
   }

   cout << endl << "Reverse Iterator:" << endl;

   vector<string>::reverse_iterator rii;
   for(rii=SS.rbegin(); rii!=SS.rend(); ++rii)// 第三种方法
   {
      cout << *rii << endl;
   }

   cout << endl << "Sample Output:" << endl;

   cout << SS.size() << endl;
   cout << SS[2] << endl;

   swap(SS[0], SS[2]);
   cout << SS[2] << endl;
}
                

用vector来表示二维、三维数组:


一个二维数组是两个vector,vector构造函数可以初始化的数组的长度,并设置初始值。
example 2:vector二维数组
#include <iostream>
#include <vector>

using namespace std;

main()
{
   // 声明二维数组的大型并且初始化
   vector< vector<int> > vI2Matrix(3, vector<int>(2,0));    

   vI2Matrix[0][0] = 0;
   vI2Matrix[0][1] = 1;
   vI2Matrix[1][0] = 10;
   vI2Matrix[1][1] = 11;
   vI2Matrix[2][0] = 20;
   vI2Matrix[2][1] = 21;

   cout << "Loop by index:" << endl;

   int ii, jj;
   for(ii=0; ii < 3; ii++)
   {
      for(jj=0; jj < 2; jj++)
      {
         cout << vI2Matrix[ii][jj] << endl;
      }
   }
}
                
example 3:vector三维数组
     
#include <iostream>
#include <vector>

using namespace std;

main()
{
                               // Vector length of 3 initialized to 0
   vector<int> vI1Matrix(3,0);

                               // Vector length of 4 initialized to hold another 

                               // vector vI1Matrix which has been initialized to 0
   vector< vector<int> > vI2Matrix(4, vI1Matrix);

                               // Vector of length 5 containing two dimensional vectors
   vector< vector< vector<int> > > vI3Matrix(5, vI2Matrix);

   ...

或者在一条语句中定义:


#include <iostream>
#include <vector>

using namespace std;

main()
{
   vector< vector< vector<int> > > vI3Matrix(2, vector< vector<int> > (3, vector<int>(4,0)) );

   for(int kk=0; kk<4; kk++)
   {
      for(int jj=0; jj<3; jj++)
      {
         for(int ii=0; ii<2; ii++)
         {
            cout << vI3Matrix[ii][jj][kk] << endl;
         }
      }
   }
}


使用迭代器:
    example 4:  对二维vector使用迭代器
   
#include <iostream>
#include <vector>

using namespace std;

main()
{
   vector< vector<int> > vI2Matrix;    // 声明二维数组
   vector<int> A, B;
   vector< vector<int> >::iterator iter_ii;
   vector<int>::iterator   iter_jj;

   A.push_back(10);
   A.push_back(20);
   A.push_back(30);
   B.push_back(100);
   B.push_back(200);
   B.push_back(300);

   vI2Matrix.push_back(A);
   vI2Matrix.push_back(B);

   cout << endl << "Using Iterator:" << endl;

   for(iter_ii=vI2Matrix.begin(); iter_ii!=vI2Matrix.end(); iter_ii++)
   {
      for(iter_jj=(*iter_ii).begin(); iter_jj!=(*iter_ii).end(); iter_jj++)
      {
         cout << *iter_jj << endl;
      }
   }
}
                

构造函数/声明:

 

方法/操作描述
vector<T> v;声明一个数据类型为 "T"的vector变量v.
vector<T> v(size_type n);声明一个大小为n,包含数据类型T的vector变量
vector<T> v(size_type n,const T& t);声明一个大小为n,包含数据类型为T,元素的值为t的vector变量
Declaration: vector(size_type n, const T& t)
vector<T> v(begin_iterator,end_iterator);从迭代器开始位置到结束位置拷贝一个vector
Declaration: template vector(InputIterator, InputIterator)

Size 方法/操作: 

Method/operatorDescription
empty()Returns bool (true/false). True if empty.
Declaration: bool empty() const
size()Number of elements of vector.
Declaration: size_type size() const
resize(n, t=T())Adjust by adding or deleting elements of vector so that its size is "n".
Declaration: void resize(n, t = T())
capacity()Max number of elements of vector before reallocation.
Declaration: size_type capacity() const
reserve(size_t n)Max number of elements of vector set to "n" before reallocation.
Declaration: void reserve(size_t)
max_size()Max number of elements of vector possible.
Declaration: size_type max_size() const
  
其他方法和操作:

Method/operatorDescription
erase()
clear()
Erase all elements of vector.
Declaration: void clear()
erase(iterator)
erase(begin_iterator,end_iterator)
Erase element of vector. Returns iterator to next element.
Erase element range of vector. Returns iterator to next element.
Declarations:
  • iterator erase(iterator pos)
  • iterator erase(iterator first, iterator last)
=
Example: X=Y()
Assign/copy entire contents of one vector into another.
Declaration: vector& operator=(const vector&)
<Comparison of one vector to another.
Declaration: bool operator<(const vector&, const vector&)
==Returns bool. True if every element is equal.
Declaration: bool operator==(const vector&, const vector&)
at(index)
v[index]
Element of vector. Left and Right value assignment: v.at(i)=e; and e=v.at(i);
Declaration: reference operator[](size_type n)
front()
v[0]
First element of vector. (Left and Right value assignment.)
Declaration: reference front()
back()Last element of vector. (Left and Right value assignment.)
Declaration: reference back()
push_back(const T& value)Add element to end of vector.
Declaration: void push_back(const T&)
pop_back()Remove element from end of vector.
Declaration: void pop_back()
assign(size_type n,const T& t)Assign first n elements a value "t".
assign(begin_iterator,end_iterator)Replace data in range defined by iterators.
Declaration:
insert(iterator, const T& t)Insert at element "iterator", element of value "t".
Declaration: iterator insert(iterator pos, const T& x)
insert(iterator pos, size_type n, const T& x)Starting before element "pos", insert first n elements of value "x".
Declaration: void insert(iterator pos, size_type n, const T& x)
insert(iterator pos, begin_iterator,end_iterator)Starting before element "pos", insert range begin_iterator to end_iterator.
Declaration: void insert(iterator pos, InputIterator f, InputIterator l)
swap(vector& v2)Swap contents of two vectors.
Declaration: void swap(vector&)

迭代器方法/操作
Method/operatorDescription
begin()Return iterator to first element of vector.
Declaration: const_iterator begin() const
end()Return iterator to end of vector (not last element of vector but past last element)
Declaration: const_iterator end() const
rbegin()Return iterator to first element of vector (reverse order).
Declaration: const_reverse_iterator rbegin() const
rend()Return iterator to end of vector (not last element but past last element) (reverse order).
Declaration: const_reverse_iterator rend() const
++Increment iterator.
--Decrement iterator.

STL list:


两个例子:

  1. 第一个为数据类型为int
  2. 第二个为类实例
example 1:
// Standard Template Library example

#include <iostream>
#include <list>
using namespace std;



main()
{
   list<int> L;
   L.push_back(0);              // Insert a new element at the end
   L.push_front(0);             // Insert a new element at the beginning
   L.insert(++L.begin(),2);     // Insert "2" before position of first argument
                                // (Place before second argument)
   L.push_back(5);
   L.push_back(6);

   list<int>::iterator i;

   for(i=L.begin(); i != L.end(); ++i) cout << *i << " ";
   cout << endl;
   return 0;
}


example 2:
     如果使用自定义类型,需要包括以下几个方面:
     a. 复制构造函数
     b.赋值运算符(=)重载
     c.小于运算符重载<
     d.等于运算符==重载

#include <iostream>
#include <list>
using namespace std;

// STL list需要重载 operators =, == and <.

class AAA
{
   friend ostream &operator<<(ostream &, const AAA &);

   public:
      int x;
      int y;
      float z;

      AAA();
      AAA(const AAA &);
      ~AAA(){};
      AAA &operator=(const AAA &rhs);
      int operator==(const AAA &rhs) const;
      int operator<(const AAA &rhs) const;
};

AAA::AAA()   // 构造函数
{
   x = 0;
   y = 0;
   z = 0;
}

AAA::AAA(const AAA &in)   // 复制构造函数,传值
{                             
   x = copyin.x;
   y = copyin.y;
   z = copyin.z;
}

ostream &operator<<(ostream &output, const AAA &aaa)
{
   output << aaa.x << ' ' << aaa.y << ' ' << aaa.z << endl;
   return output;
}

AAA& AAA::operator=(const AAA &rhs)
{
   this->x = rhs.x;
   this->y = rhs.y;
   this->z = rhs.z;
   return *this;
}

int AAA::operator==(const AAA &rhs) const
{
   if( this->x != rhs.x) return 0;
   if( this->y != rhs.y) return 0;
   if( this->z != rhs.z) return 0;
   return 1;
}

//该函数是为了让STL list支持sort
int AAA::operator<(const AAA &rhs) const
{
   if( this->x == rhs.x && this->y == rhs.y && this->z < rhs.z) return 1;
   if( this->x == rhs.x && this->y < rhs.y) return 1;
   if( this->x < rhs.x ) return 1;
   return 0;
}

main()
{
   list<AAA> L;
   AAA Ablob ;

   Ablob.x=7;
   Ablob.y=2;
   Ablob.z=4.2355;
   L.push_back(Ablob);  // 在末尾插入一个新元素

   Ablob.x=5;
   L.push_back(Ablob);  // 传值,用默认的拷贝构造函数
                        // 
   Ablob.z=3.2355;
   L.push_back(Ablob); 

   Ablob.x=3;
   Ablob.y=7;
   Ablob.z=7.2355;
   L.push_back(Ablob); 

   list<AAA>::iterator i;

   for(i=L.begin(); i != L.end(); ++i) cout << (*i).x << " "; // print member
   cout << endl;      

   for(i=L.begin(); i != L.end(); ++i) cout << *i << " "; // print with overloaded operator
   cout << endl;

   cout << "Sorted: " << endl;
   L.sort();
   for(i=L.begin(); i != L.end(); ++i) cout << *i << " "; // print with overloaded operator
   cout << endl;

   return 0;
}

                

输出结果:
7 5 5 3 
7 2 4.2355
 5 2 4.2355
 5 2 3.2355
 3 7 7.2355
 
Sorted:
3 7 7.2355
 5 2 3.2355
 5 2 4.2355
 7 2 4.2355

STL vector 和 list 函数比较:
Functionvectorlist
constructoryesyes
destructoryesyes
empty()yesyes
size()yesyes
resize()yesyes
capacity()yesno
reserve()yesno
max_size()yesyes
erase()yesyes
clear()yesyes
operator=yesyes
operator<yesyes
operator==yesyes
operator[]yesno
at()yesno
front()yesyes
back()yesyes
push_back()yesyes
pop_back()yesyes
assign()yesyes
insert()yesyes
swap()yesyes
push_front()noyes
pop_front()noyes
merge()noyes
remove()noyes
remove_if()noyes
reverse()noyes
sort()noyes
splice()noyes
unique()noyes

禾赛PandarXT-16/阿努比LpmsIG1运行lio-sam 课题是多传感器融合,将GNSS/INS/LIDAR做融合定位导航,故考虑使用lio-sam开源算法,在此记录一下我在适配传感器数据时遇到的一些问题; 阅读详情

相关推荐

CMOS传输门实战:如何用模拟开关优化你的电路设计(附常见问题排查)

本文深入探讨了CMOS传输门在电路设计中的实战应用与优化策略。文章从核心参数选型入手,详细分析了导通电阻、电荷注入等关键特性对电路性能的影响,并提供了多路复用器构建、精密电路应用等实战架构。同时,重点分享了PCB布局、电源去耦的工程细节,以及开关不导通、信号失真、高频性能不足等常见问题的系统性排查指南,旨在帮助硬件工程师充分发挥CMOS模拟开关的效能,提升电路设计的可靠性与精度。

js777的博客 450

C++11智能指针shared_ptr管理动态数组和STL容器

由于使用delete释放空间,就不会查看4字节的元素个数,而把蓝色的4字节空间作为上越界信息,把灰色的越界信息当作头部信息,把fd当成头部信息就会出错了。由于用Int[]初始化shared_ptr的模板类型参数,所以删除器使用delete[],delete[]会在_Ptr往前偏移4字节取出数组元素个数,此时会取出fdfdfdfd,然后执行这么多次析构函数。一般我们不用shared_ptr管理数组,因为我们使用的时候,无法从shared_ptr对象获取数组的长度,很容易越界,且使用不方便。

长期更新自学笔记 3794

YOLOv8实战:用Labelme标注自定义数据集并训练分割模型(附完整代码)

本文详细介绍了使用Labelme标注自定义数据集并训练YOLOv8实例分割模型的完整流程。从环境搭建、数据标注与格式转换,到模型训练、调优、验证及部署,提供了实战代码和调优建议。文章还探讨了如何结合追踪目标技术,实现视频流中的实例分割与目标追踪,为计算机视觉应用提供了一套可复制的解决方案。

552

STL——list详解

这是一片关于list的详细介绍,并模拟实现了一个list类,帮助您更深入地理解和使用STL

weixin_54209978的博客 5220

MATLAB实现灰雁优化算法(GGO):从原理到实战的详细级教程

灰雁优化算法(GGO)是一种新型群体智能算法,模拟灰雁迁徙和觅食行为。算法通过领导更替机制、V形编队飞行和群体觅食策略,平衡全局探索与局部开发能力,具有收敛精度高、避免局部最优等特点。在MATLAB环境中,算法实现包括初始化种群、迭代更新领导雁、执行编队飞行和觅食行为等核心模块。用户可根据问题维度设置参数,通过收敛曲线和可视化分析评估性能。关键参数如领导更替频率、V形编队强度和觅食强度需根据问题复杂度调整,以获得最佳优化效果。该算法适用于各类优化问题,具有较好的鲁棒性和稳定性。

fx666_的博客 1212

CST微波工作室端口设置保姆级教程:从波导端口到离散端口,手把手教你搞定S参数仿真

本文提供CST微波工作室端口设置的详细教程,涵盖波导端口和离散端口的选择与配置,助力工程师精准完成S参数仿真。通过微带线滤波器案例,详解端口尺寸、阻抗设置及常见问题排查,提升仿真效率与准确性。

weixin_42570296的博客 361

STL详解----list的使用

学习了vector与string我们可以知道,所谓的STL就是将字符串,数组等数据结构进行严密地封装,方便我们直接使用而不需要进行临时创建,本节将介绍STL中的list,该类是对双向带头循环链表的使用。

分享学习的知识,记录我的技术成长道路 9854

数码管动态扫描避坑指南:如何用188芯片实现50Hz无闪烁显示?

本文深入解析188数码管动态扫描技术,提供工业级无闪烁显示方案。通过优化轮询扫描机制、硬件电路设计和软件架构,实现50Hz高刷新率显示,解决亮度不均和鬼影问题,适用于医疗设备和工业控制面板等高要求场景。

hhh00的博客 975

STL详解— list类的介绍及使用

STL详解— list类的介绍及使用

qq_61213622的博客 3164

「JS逆向三百例」JS逆向HIKVISION-视频监控的前端密码加密

本文详细分析了HIKVISION-海康威视监控前端登录过程中密码的加密机制,通过逆向工程解析了其 JavaScript 加密逻辑,重点研究了HIKVISION-海康威视监控的前端密码SHA256加密算法的实现。基于逆向分析结果,使用 Python 模拟了HIKVISION-海康威视监控的登录流程,最终实现了自动化登录功能。本文旨在为安全研究人员提供技术参考,帮助理解前端加密机制,并强调技术研究的合法性和合规性。

布啦啦 1096

SAP-ABAP:FI财务会计模块常用BAPI及核心用途实例说明

SAP FI模块的BAPI覆盖了从主数据管理、凭证过账到财务关账的全流程操作,是系统集成与自动化的重要工具。实际应用中需结合业务场景选择合适的BAPI,并严格遵循事务控制与校验规则。如需扩展功能,可通过BAdI或用户出口增强标准逻辑。

baidu_35680696的博客 1601

C++STL:vector和list

一、什么是vector vector是C++STL(标准模板库)里的一种类模板,与普通数组不一样的是vector是可增长的,即大小不是固定的。 二、vector的定义 定义一个int型的vector则用vector<int>变量名 定义一个string型的vector则用vector<string>变量名 三、什么是list list同样也是C++STL中的一种类模板,list是一种双向链表的实现。 四、list的定义 定义一个int型的list则用list变量名 定义一个strin

DLaugust的博客 1040

人工智能算法面试大总结-总目录

涉及秋招、春招、社招

啥都生的博客 2万+

C/C++: STL(1): vector, deques, list 和 forward_list

容器 备注 vector 可变大小数组的序列容器 deques 可变大小数组的序列容器,支持头部插入 list 序列式容器。功能和数据结构中的双向链表相似 forward_list 序列式容器。功能和数据结构中的单向链表相似   都是STL(C++标准模板库)中的组件.这里简单介绍一下区别及使用方法. 参考资料链接:   C语言中文网   https://blog.youkuaiyun.com/weixin_39731083/article/details/81668335   S....

qq_37896521的博客 601

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++ STL:list和vector的比较

由于 vector 使用一段连续的内存空间来存储数据,这意味着当你访问 vector 中的一个元素时,相邻的元素很可能已经被预加载到 CPU 缓存中。当你遍历一个 vector 并访问它的元素时,由于数据连续存储,许多元素访问操作可能直接从缓存中进行,而不是从更慢的主内存中。由于 vector 的连续内存特性,可能会导致更大的内存预留(容量)以减少重新分配的频率,而 list 的内存使用更为紧凑,但每个元素需要额外的空间来存储前后节点的地址。Vector: 底层实现为动态数组,提供了一段连续的内存空间。

_ 1851

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Vector vs List:C++ STL中的两大巨头对决

在 C++ 编程中,选择正确的容器对于程序的性能和效率至关重要。今天,我们将深入探讨两个最常用的 STL 容器:vector 和 list。它们各有特色,适用于不同的场景。让我们一起来揭开它们的神秘面纱,看看在哪些情况下应该选择其中之一。

m0_72877724的博客 1809

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++ STL 详解:list 的使用、迭代器失效、模拟实现与 vector 对比

在 C++ STL 中,vector和list都是非常重要的序列式容器。如果说vector更像是“可以自动扩容的数组”,那么list更像是“一串用指针连接起来的节点”。很多同学刚学list的时候,会觉得它没有vector好用:不能下标访问,遍历起来还要用迭代器,看起来没有那么直观。但list适合频繁插入和删除插入时不会整体搬移元素删除某个节点时,通常只影响被删除节点对应的迭代器底层结构非常适合帮助我们理解链表和 STL 迭代器所以学习list。

Face_FeaR的博客 5848

c++ STL容器总结:vector、list、deque、queue、stack、set、map

c++STL中的容器会自动申请和释放内存,无需使用new、delete,一共有7种:1、vector: 类似数组,存储在一段连续的内存数组上,超出capacity后需要开辟一段新的更大的空间,把原来的数据拷贝过来,插入删除可能使iterator失效;可以快速地随机访问2、deque双端队列: 类似数组,动态的以分段连续的空间组合而成,随时能增加一段新的空间并链接起来;可以快速地在头尾插入删除数据3...

清舞 点滴 2281

【C++初阶:STL —— list】list的介绍及使用 | list的深度剖析及模拟实现 | list与vector的对比

在学完 list,大家对 STL 中的迭代器的认知会进一步提高。list 用的虽然不多,但是它的底层有很多经典的东西,尤其是它的迭代器。list 的结构对我们来说应该问题不大,因为在《数据结构》时我们就已经了解过链表了,它的结构是一个带头双向循环链表,之前我们也实现过。 对于 list 没有 reserve 和 resize,因为它的底层不是连续的空间,它是用一个申请一个,不用一个【写在前面】 在学完 list,大家对 STL 的认知可以更加深刻。list 用的虽然不多,但是它的底层有很多经典的东西,尤其

DanceBit的博客 1551

C++ STL容器概述:vector、list、deque使用

本文介绍了C++标准模板库(STL)中三种常用容器:vector、list和deque的特点及使用方法。vector作为动态数组支持随机访问,但扩容有性能开销;list作为双向链表插入删除高效但不支持随机访问;deque兼具双端操作和随机访问功能。文章详细展示了容器的创建、元素插入删除等操作示例,并提醒注意vector的内存预分配和迭代器失效问题。通过掌握这些基础容器,为进一步学习map、set等其他STL容器奠定基础。

fykam的博客 1089

再学C++:STL理解:序列式容器(array,vector,deque,forward_list,list)

理解STL序列式容器(array,vector,deque,forward_list,list)

m0_73727069的博客 927

吃透C++ STL四大容器:Vector、List、Stack、Queue核心原理与实战用法

vector和list的核心区别:内存连续vs离散、支持随机访问vs不支持、查询快增删慢vs增删快查询慢、有内存冗余vs无冗余。stack/queue为什么是适配器:无独立底层结构,依赖其他容器实现功能,仅封装专属操作规则。vector迭代器失效场景:扩容、中间插入/删除元素,list仅删除节点迭代器失效。使用优先级:默认优先用vector,频繁中间增删用list,栈逻辑用stack,排队逻辑用queue。1.Vector:动态数组,内存连续,查询遍历王者,适合静态数据存储;2.List。

星光编译者的技术博客,专注 C/C++、Linux、数据结构与算法。 449

C++STL顺序容器:vector、deque、list

文章目录一、vector容器1.1使用方式1.2使用实例二、deque容器2.1底层实现2.2使用方式三、list容器四、vector、deque、list对比分析 我们经常提到STL,那么STL究竟是什么呢? STL:其英文全称为standard template libaray,即标准模板库。我们根据需要直接实例化这些模板,提高了我们使用的效率。 一、vector容器 vector:向量容器,...

Rain的博客 945

C++ STL 容器深入剖析:vector、list、map 等的底层实现

容器类型随机访问插入(中间)删除(中间)插入(末尾)删除(末尾)查找vectorO(1)O(n)O(n)O (1)(均摊)O(1)O(n)listO(n)O(1)O(1)O(1)O(1)O(n)mapO(log n)O(log n)O(log n)O(log n)O(log n)O(log n)O (1)(平均)O (1)(平均)O (1)(平均)O (1)(平均)dequeO(1)O(n)O(n)O(1)O(1)O(n)

数字魔方操控师的博客 1121

C++ STL list vector 007:List

描述 写一个程序完成以下命令: new id ——新建一个指定编号为id的序列(id<10000) add id num——向编号为id的序列加入整数num merge id1 id2——合并序列id1和id2中的数,并将id2清空 unique id——去掉序列id中重复的元素 out id ——从小到大输出编号为id的序列中的元素,以空格隔开 输入 第一行一个数n,表示有多少个命令( n...

BLUEsang的博客 467

【C++】---STL::vector和list的区别

【C++】—STL::vector和list的区别

L19002S的博客 1080
上一篇: C++模板:函数模板、类模板、模板与继承
下一篇: C++编程规范和标准总结
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值