vector容器-容量和大N小c++的讲解

简介: vector容器-容量和大N小c++的讲解

std::vector 是 C++ 标准模板库(STL)中的一个动态数组容器,它允许我们存储一系列同类型的元素,并且可以根据需要动态地调整其大小。在 std::vector 中,有两个重要的概念:容量(capacity)和大小(size)。容量指的是 vector 当前分配的存储空间能够容纳的元素数量,而大小则指的是 vector 当前实际包含的元素数量。

 

一、大小(Size)

大小表示 vector 中当前存储的元素个数。可以使用 size() 成员函数来获取 vector 的大小。

 

代码示例

image.png

讲解

在上面的代码中,我们首先创建了一个空的 vector,并使用 size() 函数输出了其初始大小,结果为 0。接着,我们使用 push_back() 函数向 vector 中添加了三个元素,并再次使用 size() 函数输出了添加元素后的大小,结果为 3。这表明 size() 函数返回的是 vector 中实际存储的元素数量。

 

二、容量(Capacity)

容量表示 vector 当前分配的存储空间能够容纳的元素数量。它通常大于或等于 vector 的大小,因为 vector 为了提高性能,在内部通常会分配比实际存储元素更多的空间。当 vector 的大小增加到接近其容量时,它会自动分配更多的内存空间。可以使用 capacity() 成员函数来获取 vector 的容量。

 

代码示例

image.png

讲解

在上面的代码中,我们创建了一个空的 vector 并输出了其初始大小和容量。由于 vector 是空的,所以初始大小和容量都是 0。接着,我们使用一个循环向 vector 中添加了 10 个元素,并输出了添加元素后的大小和容量。通常情况下,vector 的容量会大于其大小,以减少重新分配内存的次数,提高性能。在输出中,我们可以看到容量通常是一个大于或等于大小的数。

 

三、调整容量

如果需要明确设置 vector 的容量,可以使用 reserve() 成员函数。reserve() 讲解

在上面的代码中,我们创建了一个空的 vector 并输出了其初始大小和容量。由于 vector 是空的,所以初始大小和容量都是 0。接着,我们使用一个循环向 vector 中添加了 10 个元素,并输出了添加元素后的大小和容量。通常情况下,vector 的容量会大于其大小,以减少重新分配内存的次数,提高性能。在输出中,我们可以看到容量通常是一个大于或等于大小的数。

 

三、调整容量

如果需要明确设置 vector 的容量,可以使用 reserve() 成员函数。reserve() 函数允许我们预先分配一定的内存空间,以避免在添加元素时频繁地重新分配内存。

 

代码示例,以避免在添加元素时频繁地重新分配内存。

 

代码示例

image.png

目录
相关文章
|
7月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
7月前
|
算法 编译器 C++
模拟实现c++中的vector模版
模拟实现c++中的vector模版
|
10月前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
546 4
|
9月前
|
存储 对象存储 C++
C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比
本文深入对比了 C++ 标准库中的 `std::array` 和 `std::vector`,从内存管理、性能、功能特性、使用场景等方面详细分析了两者的差异。`std::array` 适合固定大小的数据和高性能需求,而 `std::vector` 则提供了动态调整大小的灵活性,适用于数据量不确定或需要频繁操作的场景。选择合适的容器可以提高代码的效率和可靠性。
441 0
|
9月前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
215 0
|
11月前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
143 1
|
10月前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
149 0
|
7月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
3月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
91 0
|
3月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
169 0