【C++ 语言】vector 容器 ( 容器分类 | vector 声明 | vector 初始化 | vector 容器元素增删查改 )(二)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【C++ 语言】vector 容器 ( 容器分类 | vector 声明 | vector 初始化 | vector 容器元素增删查改 )(二)

2. 删除所有元素 , 这里只是清空元素内容为 0


// <2> 删除所有元素 , 这里只是清空元素内容为 0
  vector_1.clear();


3. 删除指定位置区间的元素 , 这里只是清空元素内容为 0 , 传入 2 个参数 ;


① 第 1 个是删除的起始位置 ;

② 第 2 个参数是删除的结束位置 ;

// <3> 删除指定位置区间的元素 , 这里只是清空元素内容为 0
  //  第 1 个是删除的起始位置 , 
  //  第 2 个参数是删除的结束位置 ;
  //删除从开始到结束的所有元素
  vector_1.erase(vector_1.begin() , vector_1.end());


4. 关于删除元素的内存说明 : 删除若干元素后 , vector 的容量 , 即内存所占的空间是不会减小的 ;


5. 打印删除元素后的 vector 容器大小 : 调用 vector 的 capacity() 方法即可获取其容量大小 ;


① 代码示例 :

//打印 vector 容器容量大小 , 调用 vector 的 capacity() 方法即可获取其容量大小
  //  这个容量大小是元素个数 , 不是内存字节数
  cout << "打印 vector_1 容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;


② 执行结果 :

打印 vector_1 容量大小 : vector_1.capacity() : 2

这个容量大小是元素个数 , 不是内存字节数 ;




vector ( 向量 ) 容量改变


1. 容量修改 : 删除元素 , 并不能修改容器的容量 , 如果要修改容量 , 需要使用其他容器与该容器进行交换 ;


2. 容器交换 : 调用 vector 的 swap() 方法 , 进行容器交换 , 传入 vector 容器对象当做参数 ;


① 代码示例 :

//创建一个新的 vector , 此时其容量为 0
  vector<int> vector_swap;
  //将创建的新的 vector_swap 与 vector_1 容器进行交换
  vector_swap.swap(vector_1);
  cout << "打印 vector_1 交换后的容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;


② 执行结果 :

打印 vector_1 交换后的容量大小 : vector_1.capacity() : 0




vector ( 向量 ) 涉及到的运算符重载


vector 运算符重载 : 使用 " [] " 可以访问 vector 中指定索引的变量 , vector 对 " [] " 符号进行了重载 , Ctrl + 左键 点击中括号符号 , 就可以跳转到 vector 定义的位置 , 下面的内容是 vector 对 " [] " 进行运算符重载的内容 ;


 

_NODISCARD _Ty& operator[](const size_type _Pos) {
        auto& _My_data = _Mypair._Myval2;
#if _CONTAINER_DEBUG_LEVEL > 0
        _STL_VERIFY(
            _Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst), "vector subscript out of range");
#endif // _CONTAINER_DEBUG_LEVEL > 0
        return _My_data._Myfirst[_Pos];
    }




vector ( 向量 ) 相关源码


1. 代码示例 :


// 004_Container.cpp: 定义应用程序的入口点。
//
#include "004_Container.h"
//vector 是 C++ 中定义的模板类 
#include <vector>
using namespace std;
int main()
{
  cout << "Hello Container。" << endl;
  // I . vector 向量 ( vector , dequeue , list 调用方式基本一致 )
  //vector 向量是一种支持快速随机访问的 , 连续存储元素的容器
  //声明向量
  vector<int> vector_1;
  //调用向量的构造方法 , 并传入一个 int 类型参数
  //表示创建一个有 8 个 int 类型元素空间的向量
  vector<int> vector_2(8);
  //表示创建有 8 个元素的向量 , 8 个元素的值都是 2
  vector<int> vector_3(8 , 2);
  //初始化向量时 , 传入另一个向量
  vector<int> vector_4(vector_3);
  // 2. 使用向量 : 增删查改
  // ( 1 ) 增加元素 : 调用 push_back 方法 , 容器出入策略 , 后进先出
  vector_1.push_back(8);
  vector_1.push_back(88);
  // ( 2 ) 查询元素 : 
  // <1> 通过下标获取元素
  //  这里的 [] 在 vector 中进行了运算符重载
  cout << "通过下标获取 vector_1 第 0 个元素 : vector_1[0] : " << vector_1[0] << endl;
  // <2> 通过 at() 方法获取对应索引的元素
  cout << "通过 at 方法获取 vector_1 第 0 个元素 : vector_1.at(0) : " << vector_1.at(0) << endl;
  // <3> 获取第一个元素
  cout << "通过 front 方法获取 vector_1 第 1 个元素 : vector_1.front() : " << vector_1.front() << endl;
  // <4> 获取最后一个元素
  cout << "通过 back 方法获取 vector_1 最后 1 个元素 : vector_1.back() : " << vector_1.back() << endl;
  // ( 4 ) 删除元素 : 
  // <1> 调用 pop_back 方法 , 容器出入策略 , 后进先出
  vector_1.pop_back();
  //之前向 vector 中先后放入了 8 和 88 两个数 , 
  //  然后删除了后一个元素 88 , 目前只剩下一个元素 8
  // <2> 删除所有元素 , 这里只是清空元素内容为 0
  vector_1.clear();
  // <3> 删除指定位置区间的元素 , 这里只是清空元素内容为 0
  //  第 1 个是删除的起始位置 , 
  //  第 2 个参数是删除的结束位置 ;
  //删除从开始到结束的所有元素
  vector_1.erase(vector_1.begin() , vector_1.end());
  //关于删除元素内存说明 : 
  //  删除若干元素后 , vector 的容量 , 即内存所占的空间是不会减小的 ; 
  //  调用删除方法后 , 就不能在查询上述元素了
  //打印 vector 容器容量大小 , 调用 vector 的 capacity() 方法即可获取其容量大小
  //  这个容量大小是元素个数 , 不是内存字节数
  cout << "打印 vector_1 容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;
  // ( 5 ) 改变容量 , 容器交换 , 这里使用一个容量为 0 的容器与之交换即可
  //创建一个新的 vector , 此时其容量为 0
  vector<int> vector_swap;
  //将创建的新的 vector_swap 与 vector_1 容器进行交换
  vector_swap.swap(vector_1);
  cout << "打印 vector_1 交换后的容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;
  return 0;
}



2.执行结果 :


Hello Container。
通过下标获取 vector_1 第 0 个元素 : vector_1[0] : 8
通过 at 方法获取 vector_1 第 0 个元素 : vector_1.at(0) : 8
通过 front 方法获取 vector_1 第 1 个元素 : vector_1.front() : 8
通过 back 方法获取 vector_1 最后 1 个元素 : vector_1.back() : 88
打印 vector_1 容量大小 : vector_1.capacity() : 2
打印 vector_1 交换后的容量大小 : vector_1.capacity() : 0


目录
相关文章
|
3月前
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
258 12
|
8月前
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
203 15
|
7月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
245 12
|
8月前
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
144 8
|
9月前
|
存储 缓存 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 的奥秘,从入门到高效编程
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
270 5
|
12月前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
168 0
|
3月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
599 108
下一篇
开通oss服务