C++重新入门-vector容器

目录

1.动态数组:

2.头文件和命名空间:

3.创建和初始化:

使用默认构造函数创建空的std::vector:

使用初始化列表初始化std::vector:

使用拷贝构造函数:

使用范围构造函数:

使用重复值初始化std::vector:

4.访问元素:

5.大小和容量:

获取元素数量(大小):

获取容器内部存储空间的大小(容量):

6.插入和删除元素:

在末尾插入元素:

删除末尾元素:

在指定位置插入元素:

删除指定位置的元素:

7. 遍历:

1. 使用循环遍历:

2. 使用范围-based for 循环遍历:

3. 使用迭代器遍历:

8.其他操作

1. 清空容器:

2. 交换容器:

3. 访问首尾元素:

9.总结


在C++中,std::vector是一个标准库中的容器,它提供了动态数组的功能,可以存储任意类型的元素,并且能够动态增长。以下是关于std::vector容器的详细解释:

1.动态数组:

std::vector提供了一个动态大小的数组,可以根据需要动态地增加或减少元素的数量。这使得std::vector比C-style数组更加灵活和易于使用。

2.头文件和命名空间:

要使用std::vector,需要包含头文件 <vector>,并使用命名空间std

#include <vector>
using namespace std;

3.创建和初始化:

使用默认构造函数创建空的std::vector

#include <vector>

int main() {
    std::vector<int> myVector; // 创建一个空的vector
    return 0;
}

使用初始化列表初始化std::vector

#include <vector>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5}; // 使用初始化列表初始化vector
    return 0;
}

使用拷贝构造函数:

#include <vector>

int main() {
    std::vector<int> originalVector = {1, 2, 3, 4, 5}; // 原始vector
    std::vector<int> myVector(originalVector); // 使用拷贝构造函数创建新的vector
    return 0;
}

使用范围构造函数:

#include <vector>

int main() {
    std::vector<int> originalVector = {1, 2, 3, 4, 5}; // 原始vector
    std::vector<int> myVector(originalVector.begin(), originalVector.begin() + 3); // 使用范围构造函数创建新的vector
    return 0;
}

使用重复值初始化std::vector

#include <vector>

int main() {
    std::vector<int> myVector(5, 10); // 创建包含5个重复值为10的元素的vector
    return 0;
}

4.访问元素:

访问 std::vector 中的元素可以使用下标操作符[]或者 at() 方法。下面是这两种方法的示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30, 40, 50};

    // 使用下标操作符访问元素
    std::cout << "First element: " << myVector[0] << std::endl;
    std::cout << "Second element: " << myVector[1] << std::endl;

    // 使用 at() 方法访问元素
    std::cout << "Third element: " << myVector.at(2) << std::endl;
    std::cout << "Fourth element: " << myVector.at(3) << std::endl;

    return 0;
}

请注意,at() 方法提供了边界检查,如果尝试访问超出 std::vector 界限的元素,将会抛出 std::out_of_range 异常,而使用下标操作符 [] 则不会进行边界检查,可能导致访问越界。因此,在不确定索引是否有效的情况下,最好使用 at() 方法进行访问。

5.大小和容量:

在C++中,std::vector 提供了 size()capacity() 方法来获取容器中元素的数量和容器内部存储空间的大小。

获取元素数量(大小):

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30, 40, 50};

    // 使用 size() 方法获取元素数量
    std::cout << "Size of vector: " << myVector.size() << std::endl;

    return 0;
}

获取容器内部存储空间的大小(容量):

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30, 40, 50};

    // 使用 capacity() 方法获取容器内部存储空间的大小
    std::cout << "Capacity of vector: " << myVector.capacity() << std::endl;

    return 0;
}

size() 方法返回的是容器中当前元素的数量,而 capacity() 方法返回的是容器内部实际分配的存储空间大小。通常情况下,size() 小于或等于 capacity(),因为 std::vector 会预分配一些额外的存储空间,以避免频繁的动态内存分配和释放,提高性能。

6.插入和删除元素:

在 C++ 中,std::vector 提供了多种方法来插入和删除元素,包括在容器的末尾插入和删除元素,以及在任意位置插入和删除元素。

在末尾插入元素:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30};

    // 在容器的末尾插入元素
    myVector.push_back(40);

    // 输出容器中的元素
    for (int elem : myVector) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

删除末尾元素:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30, 40};

    // 删除容器的末尾元素
    myVector.pop_back();

    // 输出容器中的元素
    for (int elem : myVector) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

在指定位置插入元素:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30};

    // 在容器的指定位置插入元素
    myVector.insert(myVector.begin() + 1, 15);

    // 输出容器中的元素
    for (int elem : myVector) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

删除指定位置的元素:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30};

    // 删除容器的指定位置的元素
    myVector.erase(myVector.begin() + 1);

    // 输出容器中的元素
    for (int elem : myVector) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

以上就是使用 std::vector 插入和删除元素的一些常见方法。通过这些方法,可以方便地在 std::vector 中进行元素的增加和删除操作。

7. 遍历:

在 C++ 中,可以使用循环或迭代器来遍历 std::vector 中的元素。

1. 使用循环遍历:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30, 40, 50};

    // 使用 for 循环遍历
    for (size_t i = 0; i < myVector.size(); ++i) {
        std::cout << myVector[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

2. 使用范围-based for 循环遍历:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30, 40, 50};

    // 使用范围-based for 循环遍历
    for (int elem : myVector) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

3. 使用迭代器遍历:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30, 40, 50};

    // 使用迭代器遍历
    for (auto it = myVector.begin(); it != myVector.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

以上是三种常见的遍历 std::vector 的方法。无论是使用循环、范围-based for 循环,还是使用迭代器,都可以方便地遍历 std::vector 中的元素,并根据需要进行操作。

8.其他操作

除了插入、删除和遍历元素之外,std::vector 还提供了其他一些常用的操作,例如清空容器、交换容器、访问首尾元素等。

1. 清空容器:

使用 clear() 方法可以清空 std::vector 中的所有元素。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30, 40, 50};

    // 清空容器
    myVector.clear();

    std::cout << "Vector size after clear: " << myVector.size() << std::endl; // 输出:0

    return 0;
}

2. 交换容器:

使用 swap() 方法可以交换两个 std::vector 容器的内容。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector1 = {1, 2, 3};
    std::vector<int> myVector2 = {4, 5, 6};

    // 交换两个容器的内容
    myVector1.swap(myVector2);

    // 输出交换后的容器内容
    std::cout << "myVector1: ";
    for (int elem : myVector1) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    std::cout << "myVector2: ";
    for (int elem : myVector2) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

3. 访问首尾元素:

使用 front() 方法可以访问 std::vector 中的第一个元素,使用 back() 方法可以访问最后一个元素。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> myVector = {10, 20, 30, 40, 50};

    // 访问首尾元素
    std::cout << "First element: " << myVector.front() << std::endl; // 输出:10
    std::cout << "Last element: " << myVector.back() << std::endl;   // 输出:50

    return 0;
}

以上是一些常见的 std::vector 其他操作方法。通过这些方法,可以更方便地操作和管理 std::vector 容器。

9.总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tkinter.Text控件中,文本存在某个关键字的将被高亮显示(标记颜色+字体加粗)

在Tkinter的Text控件中&#xff0c;要标记某个关键字并改变其颜色&#xff0c;你可以使用tag_add方法来给包含关键字的文本添加标签&#xff0c;然后使用tag_config方法来配置该标签的显示样式&#xff0c;包括前景色&#xff08;字体颜色&#xff09;和背景色等。以下是一个完…

使用腾讯云go sdk 查询对象存储中最新文件

背景&#xff1a; 腾讯云账号下&#xff0c;有很多对象存储COS桶&#xff1a; 我现在想确认某一个对象存储桶的活跃程度&#xff0c;简单的来说。我想知道这个桶里面最后上传的一个文件是什么&#xff0c;以及它的上传时间戳。 本文将介绍如何使用腾讯云对象存储&#xff08;…

MySQL:开始深入其数据(三)DQL的后续

上一章学习mysql语句里的where和join,这一章我们开始分析group by ,having,order by,limit语句。 three,too,one,go! 文章目录 重温select语法having:order by:limit 重温select语法 SELECT [ALL | DISTINCT] { * | table.* | [ table.field1 [ as alias1] [, table.field2 [a…

【C++干货基地】揭秘C++11常用特性:内联函数 | 范围for | auto自动识别 | nullptr指针空值

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

Dockerfile构建过程详解

Dockerfile介绍 docker是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 1、编写一个dockerfile文件 2、docker build构建成为一个镜像 3、docker run 运行镜像 …

如何在Window系统部署VisualSVN服务并结合cpolar实现无公网ip远程访问

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写&#xff0c;是一个开放源代码的版本控制系统…

mongoDB 优化(1)索引

1、创建复合索引&#xff08;多字段&#xff09; db.collection_test1.createIndex({deletedVersion: 1,param: 1,qrYearMonth: 1},{name: "deletedVersion_1_param_1_qrYearMonth_1",background: true} ); 2、新增索引前&#xff1a; 执行查询&#xff1a; mb.r…

[业务系统]人物坐骑系统介绍I

1.问题描述 旧版本的坐骑系统依赖于人物装备了【法宝】&#xff08;一种装备类型&#xff09;&#xff0c;装备了法宝的人物变拥有了【幻化】坐骑的能力&#xff0c;即在人物装备栏中的【外观】中会有已经幻化和未幻化&#xff08;解锁&#xff09;的坐骑。如果玩家至少幻化一…

【笔试强训错题选择题】Day5.习题(错题)解析

文章目录 前言 错题题目 错题解析 总结 前言 错题题目 1. ​ ​ 2. 3. ​ 4. ​ 5. ​ 错题解析 1. 移位运算符的使用 2. 3. 4. 5. 总结

股票技术指标(包含贪婪指数)

股票技术指标是用于分析股票价格和成交量数据&#xff0c;以便预测未来市场走势的工具。技术分析师使用这些指标来识别市场趋势、价格模式、交易信号和投资机会。技术指标通常基于数学公式&#xff0c;并通常在股票价格图表上以图形形式表示。 技术指标主要分为以下几类&#x…

过于老旧的pytorch_ssim包 请从github下载源码

有些冷门算法真的不要随便pip&#xff0c;有可能下载到史前版本…最好还是找源代码 汗 今天要用到SSIM损失函数&#xff0c;从网上简单看了一下原理就想测试一下&#xff0c;偷了一下懒就直接在命令行输入pip install pytorch_ssim了&#xff0c;结果报了一堆错误&#xff08;汗…

冒泡排序(C语言详解)

原理&#xff1a;从左到右一次比较&#xff0c;如果左侧数字比右侧数字大&#xff08;小&#xff09;&#xff0c;则两数交换&#xff0c;否则比较下一 组数字&#xff0c;每一次大循环比较可以将乱序的最右侧数字改为最大&#xff08;最小&#xff09;&#xff0c…

在springboot项目中调用通义千问api多轮对话并实现流式输出

官网文档 阿里灵积提供了详细的官方文档 如何实现多轮对话 官方文档中提到只需要把每轮对话中返回结果添加到消息管理器中&#xff0c;就可以实现多轮对话。本质上就是将历史对话再次发送给接口。 如何实现流式输出 官方文档中提出使用streamCall()方法就可以实现流式输出&…

本届挑战赛亚军方案:基于大模型和多AGENT协同的运维

“轻舟已过万重山团队”荣获本届挑战赛亚军&#xff0c;该团队来自华为集团IT-UniAI 产品和openEuler系统智能团队。 方案介绍 自ChatGPT问世以来&#xff0c;AI迎来了奇点iPhone时刻&#xff0c;这一年来大模型深入影响企业办公&#xff0c;金融&#xff0c;广告&#xff0c;…

上位机图像处理和嵌入式模块部署(上、下位机通信的三个注意点)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果最终部署在客户现场的是一个嵌入式设备&#xff0c;那么上位机在做好了算法编辑和算法部署之后&#xff0c;很重要的一步就是处理上位机和下位…

Mybatis 主从表有名字相同,只能查询出一条数据

Mybatis 主从表有名字相同&#xff0c;只能查询出一条数据 重新命名后&#xff0c;可以正常查询

【HarmonyOS】鸿蒙开发之Stage模型-UIAbility的启动模式——第4.4章

UIAbi lity的启动模式简介 一共有四种:singleton,standard,specified,multion。在项目目录的:src/main/module.json5。默认开启模式为singleton(单例模式)。如下图 singleton&#xff08;单实例模式&#xff09;启动模式 每个UIAbility只存在唯一实例。任务列表中只会存在一…

多个地区地图可视化

1. 配置Json文件 1.1 获得每个省份的json数据 打开 阿里云数据可视化平台 主页。 在搜索框中输入所需省份。 将json文件下载到本地。 1.2 将各省份的json数据进行融合 打开 geojson.io 主页 点击 open&#xff0c;上传刚刚下载的 json 文件&#xff0c;对多个省份不断…

SpringCloud负载均衡源码解析 | 带你从表层一步步剖析Ribbon组件如何实现负载均衡功能

目录 1、负载均衡原理 2、源码分析 2.1、LoadBalanced 2.2、LoadBalancerClient 2.3、RibbonAutoConfiguration 2.4、LoadBalancerAutoConfiguration 2.5、LoadBalancerIntercepor⭐ 2.6、再回LoadBalancerClient 2.7、RibbonLoadBalancerClient 2.7.1、DynamicServe…

JavaScript进阶-高阶技巧

文章目录 高阶技巧深浅拷贝浅拷贝深拷贝 异常处理throw抛异常try/caych捕获异常debugger 处理thisthis指向改变this 性能优化防抖节流 高阶技巧 深浅拷贝 只针对引用类型 浅拷贝 拷贝对象后&#xff0c;里面的属性值是简单数据类型直接拷贝值&#xff0c;如果属性值是引用数…