C++(23):容器类<vector>

news2025/5/19 11:04:04

目录

一、核心概念     

二、基本语法

1. 头文件

2. 声明与初始化

三、常用操作

四、具体实例

1、size()、front()、back()

2、push_back()、pop_back()、capacity()

3、reserve() 


一、核心概念     

        Vectors 包含着一系列连续存储的元素,其行为和数组类似。

        C++标准模板库(STL)是C++标准库的核心组件,提供了一套通用的数据结构和算法模板。其中<vector>是最常用的容器之一,实现了动态数组的功能。

        vector是一种序列容器,内部使用动态分配的数组存储元素。它支持快速随机访问,可以通过下标直接访问任意元素,时间复杂度为O(1)。与普通数组不同,vector能自动管理内存,当元素数量超过当前容量时会自动扩容,通常按原有容量的1.5或2倍进行扩展。

二、基本语法

1. 头文件

         在 C++ 中,使用 <vector> 需要包含头文件 <vector>。

#include <vector>
2. 声明与初始化

        <vector> 需要指定元素类型,可通过多种方式进行初始化。

vector<T> vec;            // 默认初始化(空vector)
vector<T> vec(n);         // 创建包含n个默认初始化元素的vector
vector<T> vec(n, value);  // 创建包含n个值为value的元素的vector
vector<T> vec{1, 2, 3};  // 初始化列表(C++11)


#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1;                  // 空的vector
    std::vector<int> vec2(5);               // 长度为5的vector,元素默认初始化
    std::vector<int> vec3(5, 10);           // 长度为5的vector,元素值为10
    std::vector<int> vec4 = {1, 2, 3, 4};   // 使用初始化列表初始化

    return 0;
}
//声明一个 vector
std::vector<int> myVector;

//添加元素
myVector.push_back(10);

//访问元素
int firstElement = myVector[0];

//获取元素数量
size_t size = myVector.size();

//清空 vector
myVector.clear();

三、常用操作

方法/操作功能描述时间复杂度
vec.push_back(x)在末尾添加元素O(1)平均
vec.pop_back()删除末尾元素O(1)
vec.size()返回当前元素数量O(1)
vec.empty()检查是否为空O(1)
vec[i]通过下标访问元素(无边界检查)O(1)
vec.at(i)通过下标访问元素(带边界检查)O(1)
vec.front()访问第一个元素O(1)
vec.back()访问最后一个元素O(1)
vec.clear()清空所有元素O(n)

四、具体实例

1、size()、front()、back()

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> vec = { 1, 2, 3, 4, 5 };

    // 遍历输出所有元素
    cout << "向量元素:";
    for (int i = 0; i < vec.size(); ++i) {
        cout << vec[i] << " ";
    }
    cout << endl;

    // 获取首尾元素
    cout << "首元素:" << vec.front() << endl;
    cout << "末元素:" << vec.back() << endl;

    return 0;
}

#include <iostream>
#include <vector>

using namespace std;

int main() {
    // 创建整型向量容器
   vector<int> numbers;

    // 向容器添加数据
    numbers.push_back(1);  // 末尾插入元素10
    numbers.push_back(2);  // 末尾插入元素20
    numbers.push_back(3);  // 末尾插入元素30

    // 显示当前容器内容
    cout << "当前容器元素:";
    for (int i = 0; i < numbers.size(); ++i) {
        cout << numbers[i] << " ";
    }
    cout << endl;

    // 继续追加元素
    numbers.push_back(4);  // 末尾插入元素40
    numbers.push_back(5);  // 末尾插入元素50

    // 展示更新后的元素集合
    std::cout << "新增元素后容器内容:";
    for (int i = 0; i < numbers.size(); ++i) {
        cout << numbers[i] << " ";
    }
    cout << endl;

    // 获取首元素
    cout << "容器首元素为:" << numbers[0] << endl;

    // 清空容器数据
    numbers.clear();

    // 验证容器状态
    if (numbers.empty()) {
        cout << "当前容器已清空" << endl;
    }

    return 0;
}
2、push_back()、pop_back()、capacity()

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

int main() {
    vector<int> vec;    // 创建整型向量容器

    // 向容器添加元素
    vec.push_back(1);  
    vec.push_back(1);  
    vec.push_back(2);  
    vec.push_back(8);

    // 显示容器元信息
    cout << "当前元素数量:" << vec.size() << endl;
    cout << "当前存储容量:" << vec.capacity() << endl;

    // 移除最后一个元素
    vec.pop_back();
    cout << "删除末尾元素后,数量:" << vec.size() << endl;

    return 0;
}

3、reserve() 

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

int main() {
    vector<int> vec;          // 创建整型向量容器
    vec.reserve(10);          // 预分配容量空间,避免多次内存分配

    for (int i = 0; i < 10; ++i) {
        vec.push_back(i);     // 添加元素到容器末尾
        cout << "添加元素后的容量:" << i << ",当前容量:" << vec.capacity() << endl;
    }

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2379231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hugo 安装保姆级教程(搭建个人blog)

Hogo 安装保姆级教程 友链 参考文章&#xff1a; https://blog.csdn.net/xianyun_0355/article/details/140261279 前言 Hugo 是 Go 编写的静态网站生成器&#xff0c;速度快&#xff0c;易用&#xff0c;可配置。作为一款跨平台开源建站系统&#xff0c;当前提供 Windows&…

tomcat查看状态页及调优信息

准备工作 先准备一台已经安装好tomcat的虚拟机&#xff0c;tomcat默认是状态页是默认被禁用的 1.添加授权用户 vim /usr/local/tomcat/conf/tomcat-users.xml22 <role rolename"manager-gui"/>23 <user username"admin" password"tomcat&q…

从坏道扫描到错误修复:HD Tune实战指南

一、硬盘检测的必要性 随着计算机使用时间的增加&#xff0c;机械硬盘和固态硬盘都会出现不同程度的性能衰减。定期进行硬盘健康检查可以&#xff1a;及时发现潜在故障&#xff1b;预防数据丢失风险&#xff1b;掌握存储设备实际状态。 二、HD Tune功能解析 性能测试&#x…

将嵌入映射到 Elasticsearch 字段类型:semantic_text、dense_vector、sparse_vector

作者&#xff1a; Andre Luiz 讨论如何以及何时使用 semantic_text、dense_vector 或 sparse_vector&#xff0c;以及它们与嵌入生成的关系。 通过这个自定进度的 Search AI 实践学习亲自体验向量搜索。你可以开始免费云试用&#xff0c;或者在本地机器上尝试 Elastic。 多年来…

解决uni-app开发中的“TypeError: Cannot read property ‘0‘ of undefined“问题

问题背景 在使用uni-app开发小程序或App时&#xff0c;你可能会遇到这样一个错误: TypeError: Cannot read property 0 of undefinedat uni.promisify.adaptor.js:7这个错误看起来很唬人&#xff0c;但它实际上与uni-app框架中的Promise适配器有关。今天&#xff0c;我们将深…

翻译:20250518

翻译题 文章目录 翻译题一带一路中国结 一带一路 The “One Belt and One Road” Initiative aims to achieve win-win and shared development. China remains unchanged in its commitment to foster partnerships. China pursues an independent foreign policy of peace, …

西门子1200/1500博图(TIA Portal)寻址方式详解

西门子博图&#xff08;TIA Portal&#xff09;是西门子公司推出的自动化工程软件平台&#xff0c;广泛应用于工业自动化领域。在编写PLC程序时&#xff0c;寻址方式是一个非常重要的概念&#xff0c;它决定了如何访问和操作PLC中的数据和资源。本文将详细介绍西门子博图中的寻…

记录一次win11本地部署deepseek的过程

20250518 win11 docker安装部署 ollama安装 ragflow部署 deepseek部署 文章目录 1 部署Ollama下载安装ollama配置环境变量通过ollama下载模型deepseek-r1:7b 2 部署docker2.1 官网下载amd版本安装2.2 配置wsl2.3 Docker配置&#xff1a;位置代理镜像源 3 部署RAGFlow更换ragfl…

嵌入式STM32学习——外部中断EXTI与NVIC的基础练习⭐

按键控制LED灯 按键控制LED的开发流程&#xff1a; 第一步&#xff1a;使能功能复用时钟 第二布&#xff0c;配置复用寄存器 第三步&#xff0c;配置中断屏蔽寄存器 固件库按键控制LED灯 外部中断EXTI结构体&#xff1a;typedef struct{uint32_t EXTI_Line; …

<前端小白> 前端网页知识点总结

HTML 标签 1. 标题标签 h1到h6 2. 段落标签 p 3. 换行 br 水平线 hr 4. 加粗 strong 倾斜 em 下划线 ins 删除 del 5. 图像标签 img src-图像的位置 alt- 图片加载失败显示的文字 替换文本 title--- 鼠标放到图片上显示的文字 提示…

历史数据分析——宁波海运

运输服务 运输服务板块简介: 运输服务板块主要是为货物与人员流动提供核心服务的企业的集合,涵盖铁路、公路、航空、海运、物流等细分领域。该板块具有强周期属性,与经济复苏、政策调控、供需关系密切关联,尤其是海运领域。有不少国内股市的铁路、公路等相关的上市公司同…

小结:jvm 类加载过程

类加载过程 是Java虚拟机&#xff08;JVM&#xff09;将字节码文件&#xff08;.class文件&#xff09;加载到内存中&#xff0c;并转换为运行时数据结构的过程。这个过程可以分为多个步骤&#xff0c;每个步骤都有其特定的任务和目的。根据你提供的信息&#xff0c;以下是类加…

OpenCv高阶(八)——摄像头调用、摄像头OCR

文章目录 前言一、摄像头调用通用方法1、导入必要的库2、创建摄像头接口 二、摄像头OCR1.引入库2、定义函数&#xff08;1&#xff09;定义显示opencv显示函数&#xff08;2&#xff09;保持宽高比的缩放函数&#xff08;3&#xff09;坐标点排序函数&#xff08;4&#xff09;…

Java开发经验——阿里巴巴编码规范实践解析3

摘要 本文深入解析了阿里巴巴编码规范中关于错误码的制定与管理原则&#xff0c;强调错误码应便于快速溯源和沟通标准化&#xff0c;避免过于复杂。介绍了错误码的命名与设计示例&#xff0c;推荐采用模块前缀、错误类型码和业务编号的结构。同时&#xff0c;探讨了项目错误信…

MySQL——6、内置函数

内置函数 1、日期函数2、字符串函数3、数学函数4、其他函数 1、日期函数 1.1、获取当前日期&#xff1a; 1.2、获取当前时间&#xff1a; 1.3、获取当前时间戳&#xff1a; 1.4、获取当前日期时间&#xff1a; 1.5、提取出日期&#xff1a; 1.6、给日期添加天数或时间…

低延迟与高性能的技术优势解析:SmartPlayer VS VLC Media Player

在实时视频流的应用中&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09;播放器扮演着至关重要的角色&#xff0c;尤其是在视频监控、远程医疗、直播等高实时性需求的场景中。随着行业需求的不断升级&#xff0c;对播放器的低延迟、稳定性、兼容性等方面的…

【交互 / 差分约束】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long;const int N 10510; const int M 200 * 500 10; int h[N], ne[M], e[M], w[M], idx; ll d[N]; int n, m; bool st[N]; int cnt[N];void add(int a, int b, int c) {w[idx] c, e[idx] b…

宝塔面板部署前后端项目SpringBoot+Vue2

这篇博客主要用来记录宝塔部署前端后端项目的过程。因为宝塔部署有点麻烦&#xff0c;至少在我看来挺麻烦的。我还是喜欢原始的ssh连接服务器进行操作。但是公司有项目用到了宝塔&#xff0c;没办法啊&#xff0c;只能摸索记录一下。 我们需要提前准备好后端项目的jar包和前端项…

现代生活健康养生新视角

在科技飞速发展的今天&#xff0c;我们的生活方式发生巨大转变&#xff0c;健康养生也需要新视角。从光线、声音等生活细节入手&#xff0c;能为健康管理开辟新路径。​ 光线与健康密切相关。早晨接触自然光线&#xff0c;可调节生物钟&#xff0c;提升血清素水平&#xff0c;…

多模态大语言模型arxiv论文略读(八十一)

What is the Visual Cognition Gap between Humans and Multimodal LLMs? ➡️ 论文标题&#xff1a;What is the Visual Cognition Gap between Humans and Multimodal LLMs? ➡️ 论文作者&#xff1a;Xu Cao, Bolin Lai, Wenqian Ye, Yunsheng Ma, Joerg Heintz, Jintai …