首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

动态数组和C++ std::vector详解

1. std::vector std::vector是C++的默认动态数组,其与array最大的区别在于vector数组动态的,即其大小可以在运行时更改。...std::vector是封装动态数组的顺序容器,且该容器中元素的存取是连续的。 vector的存储是自动管理,不需要人为操作自动实现按需扩张收缩。...但实现自动管理的代价就是:vector通常占用多于静态数组的空间,因为其需要更多的内存以管理将来的增长。vector在分配内存的时候是先分配一定数量的内存,然后在内存耗尽时再重新申请分配。...(文章后面有详细的介绍) 正确的使用reserve能够避免减少不必要的分配,例如在向vector添加元素之前提前知道元素的大致数量,使用reserve,可以提前合理分配好存储空间,避免在vector增长阶段不必要的内存分配和复制...使用shrink_to_fit()降低内存 从vector中擦除元素不会改变其容量,因此未存放的元素的位置对应内存不会被释放,如果后续不需要再使用这些空闲的内存,可以使用shrink_to_fit()对该内存进行释放

44710

Vector动态数组使用和说明

Java中,数组对象一旦创建后,其元素的个数 不能被修改。而Java.util包中的Vector类(向量)提供类似于数组的能力,且能够动态地调整自身的大小。...Vector类似于一个数组,但与数组相比在使用上有两个优点: ① 使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加; ② Vector类提供额外的方法来增加、...Java中,数组对象一旦创建后,其元素的个数 不能被修改。而Java.util包中的Vector类(向量)提供类似于数组的能力,且能够动态地调整自身的大小。...Vector类似于一个数组,但与数组相比在使用上有两个优点: ① 使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加; ② Vector类提供额外的方法来增加、删除元素...我们把 vector称为容器,是因为它可以包含其他对象,能够存放任意类型的 动态数组,增加和压缩数据。一个容器中的所有对象都必须是同一种类型的 [2] 。

76010
您找到你想要的搜索结果了吗?
是的
没有找到

【C++】STL 容器 - vector 动态数组容器 ① ( vector 动态数组容器功能简介 | vector 动态数组默认无参构造函数 )

文章目录 一、vector 动态数组 1、vector 动态数组简介 2、vector 动态数组容器功能简介 二、vector 动态数组默认无参构造函数 1、vector 动态数组默认构造函数 2、代码示例...增 / 删 / 查 / 改 / 排序 等功能 ; 动态改变大小 : vector 动态数组 可以在运行时 动态 改变大小 ; 使用 push_back() 函数 动态 添加元素 ; 使用 pop_back...容器对象 , 并使用动态数组 容器 ; vector 动态数组 容器 是使用 模板类 实现的 , vector 对象 的 默认构造形式 如下 : vector vecT; 上述默认构造形式...动态数组容器 vector vecpS; 2、代码示例 - vector 动态数组默认构造函数 使用 vector 动态数组容器 前 , 需要导入 头文件 ;..., 即可存储不同类型的元素 ; vector vecT; 代码示例 : #include "iostream" using namespace std; #include "vector"

35410

C++随记(四)---动态数组vector

C++随记(四)---动态数组vector         前面两篇博文简单讲了一下C++通过new分配动态内存的问题。...基本上,它是使用new创建动态数组的替代品,而且它确实就是用new和delete来管理内存的,但是这种工作是自动完成的,所以你使用vector的时候完全就可以忘掉我前面两篇博文讲的东西,直接拿来vector...4个要点: ①使用vector对象时要包含头文件:#include ②vector包含在名称空间std中; ③使用时还是应该像数组那样指出它存储的数据类型; ④可以有很多方法来指定它的元素数...注意:vector的类型不局限于int、double、char等,它包含的元素可以是结构体,也可以是vector,这就是二维动态数组了。...普通数组也有二维数组的形式,但依然需要我定义数组的时候就确定好数组大小,使用起来不方便,而二维的vector容器就能很好的解决这个问题。

1.5K00

STL 源码剖析之动态数组 vector

STL 源码剖析之动态数组 vector 0.导语 vector 的数据安排以及操作方式,与 array 非常相似。...两者的唯一差别在于空间的运用的灵活性,array 是静态的,一旦配置了就不能改变,而 vector动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。...的内存管理 _Vector_base中有一个内存管理器_Vector_impl类,该结构体继承allocator(根据上述 1.1 等价条件得出)。...使用两个迭代器范围内的值初始化,除了stl的迭代器,也可以是数组地址 template<typename _InputIterator, typename = std::_RequireInputIter..._M_finish,_M_get_Tp_allocator()); } 5.vector 插入涉及到内存分配,动态调整,与一开始提到的 vector 与 array 区别,就在下面体现出: typename

1.6K20

【C++】STL 容器 - vector 动态数组容器 ⑤ ( vector 容器元素访问 | at 函数 | [] 运算符重载 函数 | vector 容器首尾元素访问 )

, 可以使用 at() 函数 和 [] 操作符 ; vector 类的 at 函数 , 可以访问指定索引位置的元素 , 函数原型如下 : const_reference at(size_type pos...) const; 该函数返回容器中指定位置的元素的常量引用 ; 特别注意 : 如果指定的位置超出了容器的范围 , at 函数会抛出 std::out_of_range 异常 , 在使用 at 函数之前..., 最好先检查位置是否在容器的范围内 ; 推荐使用 [0, vec.size() - 1] 闭区间之间的索引值 ; 在进行遍历时 , 推荐使用 for (int i = 0; i < vec.size...容器访问指定索引的元素 - [] 运算符重载 函数 vector 容器可以使用 [] 运算符访问其元素 , 调用的是 [] 运算符重载 函数 , 函数原型如下 : reference operator...会抛出异常 ; 因此,在使用 [] 运算符重载之前,也应该先检查位置是否在容器的范围内 ; 代码示例 : #include "iostream" using namespace std; #include

14410

C++结构数组 | 结构数组使用

C++结构数组 C++结构数组与以前介绍过的数值型数组的不同之处在于:每个数组元素都是一个结构体类 型的数据,它们都分别包括各个成员项。...C++结构数组定义 C++结构数组的定义和定义结构体变量的方法相仿,只需声明其为数组即可 struct Student{ //自定义结构体变量      int num;//学号      char...一个结构体常量应包括结 构体中全部成员的值。  经典案例:C++结构数组使用。...#include//预处理 using namespace std;//命名空间  int main()//主函数  {   struct Student{ //自定义结构体变量 ...C++结构数组 | 结构数组使用 更多案例可以go公众号:C语言入门到精通

4.4K88

数据结构与算法(一): 动态数组

小码哥数据结构与算法(一): 动态数组 本篇是恋上数据结构与算法(第一季)的学习笔记, 使用JAVA语言 一、数组(Array) 数组是一种顺序存储的线性表,所有元素的内存地址都是连续的 int[...在很多编程语言中, 数组有个致命的缺点, 无法动态修改容量 实际开发中我们希望数组的容量是动态变化的 二、动态数组 可以通过数组实现一个动态数组, 动态数组的容量是动态变化的 可以对动态数组进行增删改查操作...index位置对应的元素 E remove(int index); // 查看元素的位置 int indexOf(E element); // 清除所有元素 void clear(); 复制代码 三、动态数组的设计...(E[]) new Object[capacity]; } // 默认情况 public ArrayList() { this(CAPACITY_DEFAULT); } } 复制代码 四、动态数组的实现...所以当数组存满元素时, 就需要对数组进行扩容 因为数组是无法动态扩容的, 所以需要创建一个新的数组,这个数组的容量要比之前数组的容量大 然后在将原数组中的元素存放到新数组中, 这样就实现了数组的扩容

71041

【C++】STL 容器 - vector 动态数组容器 ⑧ ( vector 容器添加 删除元素 | clear 函数 | insert 函数 | erase 函数 )

参考 【C++】STL 容器 - vector 动态数组容器 ④ ( vector 容器容量大小操作 | vector 容器容量判定 | vector 容器重新指定容器大小 | 容器尾部插入/删除元素..., 之前的 迭代器 指向的仍然是被删除的元素 , 如果使用之前的迭代器获取数据 , 程序会崩溃 ; 代码示例 : #include "iostream" using namespace std; #include..., 之前的 迭代器 指向的仍然是被删除的元素 , 如果使用之前的迭代器获取数据 , 程序会崩溃 ; 代码示例 : #include "iostream" using namespace std; #include...使用 while 循环实现上述效果 : 代码示例 : #include "iostream" using namespace std; #include "vector" // 打印 vector<int...二、 vector 插入元素 1、vector 容器尾部 插入 元素 - push_back 函数 参考 【C++】STL 容器 - vector 动态数组容器 ④ ( vector 容器容量大小操作

1.7K10

【C++】STL 容器总结 ( STL 各容器特点 | STL 个容器使用场景 | 单端数组容器 | 双端队列容器 | 双向链表容器 | 集合容器 | 多重集合容器 | 映射容器 | 多重映射容器 )

一、STL 各容器特点 1、std::vector 单端数组容器 std::vector 动态数组容器特点 : 底层结构 : 底层由 动态数组 实现 , 特点是 存储空间 连续 ; 访问遍历 : 支持...; 访问遍历 : 支持 随机访问迭代器 , 其性能比 vector 动态素组要低 ; 插入 / 删除 : 头部 和 尾部 插入 / 删除效率高 , O(1) 复杂度 ; 中间 插入/删除效率低 , 由于存储空间连续..., 需要将插入 / 删除位置之后的元素依次改变位置 , 比 vector 动态数组要快一些 ; 空间效率 : 底层实现时比 vector结构要复杂 , 也会事先预留一些额外空间 , 以减少重新分配的次数...排序规则 仿函数 ; 使用场景 : 需要 有序集合 且 元素 不重复 的场景 ; 5、std::multiset 多重集合容器 std::multiset 多重集合容器特点 : 底层结构 : 底层由...如果需要 随机访问 , 则使用 vector 单端数组 或 deque 双端数组 容器 ; 如果 需要 在 尾部 频繁 插入 / 删除 , 则使用 vector 单端数组 ; 如果 需要 在 首部 和

1.9K10

【C++】STL 容器 - vector 动态数组容器 ③ ( vector 容器初始化 - 初始化列表 | vector 容器赋值 - assign 函数 swap 函数 )

C++ 标准模板库 ( Standard Template Library , STL ) 中的一个动态数组 容器 , 该容器有如下初始化方式 : 默认初始化 : 创建一个空的 vector 容器 ;...2, 3}; 使用数组初始化 : 向 vector 容器 构造函数中 传递一个数组数组个数 , 来初始化 vector 容器 // 先声明一个数组 int array[] = {1, 2, 3,...4, 5}; // 将整个数组的值 初始化给 vector 容器 vector vec(array, array + sizeof(array) / sizeof(int)); 使用迭代器范围初始化...:vectorstd::list 容器 时 , std::initializer_list 非常有用 ; 使用 std::initializer_list 初始化 vector 容器 , 可以先声明...创建一个 vector 动态数组容器 // 该容器中 有 3 个元素 , 每个元素值为 int 类型值 1 vector vec1(3, 1); // 3.

58310

9.2 使用结构数组

01 定义结构数组 1、一个结构体变量中可以存放一组有关联的数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构数组。...2、结构数组与之前介绍的数值型数组的不同之处在于每个数组元素都是一个结构体类型的数据,他们都包括各个成员项。...3、定义结构数组一般形式 (1)struct 结构体名 {成员表列}数组名[数组长度]; (2)先声明一个结构体类型(如struct Person),然后再用此类型定义结构数组结构体类型 数组名[...数组长度]; 4、对结构数组初始化的形式是在定义数组的后面加上:={初值表列}; 5、在定义结构数组时进行初始化,为清晰起见,将每个学生的信息用一对花括号包起来,这样做,阅读和检查比较方便,尤其当数据量多时

6783129

【C++】STL 容器 - vector 动态数组容器 ④ ( vector 容器容量大小操作 | vector 容器容量判定 | vector 容器重新指定容器大小 | 容器尾部插入删除元素 )

n 大于当前容器的大小 , 则会在容器的末尾添加元素 , 使用元素类型的默认构造函数创建新元素 ; 如果 n 小于当前容器的大小 , 则会在容器的开头删除元素 ; // 重新指定容器大小 void resize...std::vector vec = {1, 2, 3}; // 将 vector 的大小增加到 5 , 并使用 6 填充剩余元素 vec.resize(5, 6); 上述两个函数都不会改变元素的顺序...; 3、代码示例 代码示例 : #include "iostream" using namespace std; #include "vector" int main() { std::vector...将 vector 的大小增加到 8 , 并使用 6 填充剩余元素 vec.resize(8, 6); // 控制台暂停 , 按任意键继续向后执行 system("pause"); return...std; #include "vector" int main() { // 创建空的 vector 容器 std::vector vec; // 向容器尾部添加元素

51010

VB.NET 数组的定义 动态使用 多维数组

非常多情况下利用数组索引来设置一个循环,这样就能够高效地处理复杂的情况,因此在非常多情况下,使用数组能够缩短或者简化程序的代码。本文主要介绍VB.NET数组使用,希望对大家的使用带来帮助。...VB.NET中提供的数组类型和VB 6.0中有一些区别,我们将在以下做具体的解说。 (1)VB.NET数组的声明 VB.NET中的数组有两种类型:定长数组动态数组。...(3)动态数组 有时在程序执行之前无法确认数组的大小,VB.NET提供了在程序执行时动态决定数组大小的功能,即动态数组。...建立一个动态数组的具体过程例如以下: ①和声明一般数组一样,能够使用前面介绍的几种声明,仅仅是赋一个空维数组,这样就将数组声明为动态数组。...◆处理集合的速度较数组慢,可是在处理较小的动态条目集,使用集合是最为理想的选择。

3.3K10

c++中的动态数组动态结构体、string类学习总结

大家周末好,今天给大家分享c++中的动态数组动态结构体以及string类的学习总结,在今天写文章之前,给大家分享一个可以面试刷题的地方,如果大家平时没啥事情或者离面试时间比较久,可以尝试去牛客网里面去刷题...2、动态数组的创建: (1)首先你的弄明白啥动态数组,从字面意思来看,就是这个数组动态的,可控制的,也就是我们刚才提到的面向对程编程,它侧重程序在运行阶段,这也就是意味着我们动态数组,在运行阶段的时候...,并把该地址赋给指针p int *p = new int[10]; 这里还用两种方式来创建动态数组:第一种就是使用模板类vector;第二种使用模板类array(更方便,更加安全) #include... using namespace std; int n; cin>>n; vector(int) vi(3); vi[0]=1; vi[1]=2; vi[2]=3 #include...二、动态结构体: 1、创建动态结构体: 动态结构体的概念和动态数组的概念理解一致。

1.3K30

【数据结构】二次封装自己的数组(三)升级为动态数组

我们之前在我们的数组内部封装了静态的数组,如果当我们的数组增加,超过了我们数组所设置的容量时,程序会出现错误。...在数组数据超过容量时,我们将数组扩容2倍。...创建一个新数组,容量为原来容量的两倍,将原数据拷贝进新数组,并改变data的引用。...我们再次添加111,发现数组扩容了两倍,capacity=16,再次添加222,数组数据增加1,容量不变。符合我们设计的预期。...如果容量比较大,我们存的数据使用的空间少,将会造成资源的浪费,我们这时设置,当数组中数据的量小于容量的1/2时,将数组容量缩减一半 修改删除方法 //删除指定索引位置的元素 public

7410
领券