首页 > 编程语言 >C++中vector的使用方法

C++中vector的使用方法

时间:2024-10-26 09:58:26浏览次数:1  
标签:std 初始化 示例 int 元素 C++ vector 方法

1 包含头文件和命名空间

  • 首先,在使用vector之前,需要包含<vector>头文件。在 C++ 中,如果使用标准命名空间,还需要加上using namespace std;语句(不过这种全局使用命名空间的方式在大型项目中可能会引起命名冲突,也可以只使用std::vector来明确指定是标准库中的vector类型)。
  • 示例:
   #include <vector>
   // using namespace std;(可选择使用)

2 声明和初始化

  • 默认初始化:
    • 可以声明一个空的vector,其元素类型为TT可以是任何数据类型,如intdoublestring等)。
    • 示例:std::vector<int> v;,这里v是一个空的vector,用于存储int类型的元素。
  • 指定大小初始化:
    • 可以创建一个具有指定大小的vector,并可以选择为每个元素提供初始值。
    • 示例:std::vector<int> v(n);,这里v是一个包含n个元素的vector,每个元素会被默认初始化(对于基本数据类型,如int,会被初始化为 0)。如果要初始化为特定的值,可以使用std::vector<int> v(n, value);,这里vn个元素都会被初始化为value(例如std::vector<int> v(5, 10);会创建一个包含 5 个元素且每个元素都是 10 的vector)。
  • 从已有容器初始化:
    • 可以使用另一个相同类型的容器(如另一个vector)来初始化新的vector
    • 示例:std::vector<int> v1 = {1, 2, 3}; std::vector<int> v2(v1);,这里v2会被初始化为与v1相同的内容,包含 3 个元素 1、2、3。
  • 使用迭代器初始化(高级用法):
    • 可以使用迭代器范围来初始化vector,通常用于从一个已有的数据序列(如数组或其他容器的一部分)来创建vector
    • 示例:int arr[] = {1, 2, 3, 4, 5}; std::vector<int> v(arr, arr + 5);,这里v会被初始化为包含数组arr中的 5 个元素。

3 访问元素

  • 使用[]运算符:
    • 可以通过[]运算符来访问vector中的元素,类似于访问数组元素。需要注意的是,这种方式不进行边界检查,如果访问的索引超出范围,会导致未定义行为。
    • 示例:std::vector<int> v = {1, 2, 3}; int element = v[1];,这里element会获取v中的第二个元素(索引为 1),值为 2。
  • 使用at()方法:
    • at()方法与[]运算符类似,但它会进行边界检查,如果索引超出范围,会抛出std::out_of_range异常。
    • 示例:std::vector<int> v = {1, 2, 3}; try { int element = v.at(3); } catch (std::out_of_range& e) { std::cerr << "Index out of range: " << e.what() << std::endl; },这里访问索引为 3 的元素,由于超出了v的范围(v只有 3 个元素,索引范围是 0 - 2),会抛出异常并被捕获处理。

4 添加和删除元素

  • 添加元素:
    • push_back()方法:在vector的末尾添加一个元素。
    • 示例:std::vector<int> v; v.push_back(1); v.push_back(2);,这里会在v的末尾依次添加 1 和 2 两个元素,v最终会包含两个元素 1 和 2。
    • insert()方法(高级用法):可以在指定位置插入一个或多个元素。
    • 示例:std::vector<int> v = {1, 3}; v.insert(v.begin() + 1, 2);,这里v.begin() + 1表示在索引为 1 的位置(第二个元素之前)插入元素 2,v最终会包含 1、2、3 三个元素。
  • 删除元素:
    • pop_back()方法:删除vector末尾的一个元素。
    • 示例:std::vector<int> v = {1, 2, 3}; v.pop_back();,这里会删除v末尾的元素 3,v最终会包含 1 和 2 两个元素。
    • erase()方法(高级用法):可以删除指定位置的一个或多个元素。
    • 示例:std::vector<int> v = {1, 2, 3, 4}; v.erase(v.begin() + 1);,这里v.begin() + 1表示删除索引为 1 的元素(第二个元素),v最终会包含 1、3、4 三个元素。

5 获取向量的属性

  • size()方法:返回vector中元素的个数。
  • 示例:std::vector<int> v = {1, 2, 3}; std::cout << v.size() << std::endl;,这里会输出 3,表示v中有 3 个元素。
  • empty()方法:检查vector是否为空,返回truefalse
  • 示例:std::vector<int> v; std::cout << v.empty() << std::endl;,因为v是一个空向量,所以会输出true
  • capacity()方法(高级用法):返回vector在不重新分配内存的情况下能够容纳的元素数量。这与size()不同,size()是当前元素的数量,而capacity()是潜在的容量。
  • 示例:std::vector<int> v; std::cout << v.capacity() << std::endl;,对于一个新创建的空向量,capacity可能是 0(具体取决于实现)。当添加元素时,capacity可能会根据一定的策略自动增长。

6 遍历向量

  • 使用索引遍历:
    • 可以像遍历数组一样,使用索引和[]运算符或者at()方法来遍历vector
    • 示例:std::vector<int> v = {1, 2, 3}; for (int i = 0; i < v.size(); i++) { std::cout << v[i] << " "; },这里会输出1 2 3
  • 使用迭代器遍历(推荐用于更复杂的操作):
    • vector提供了迭代器来访问元素。begin()方法返回指向第一个元素的迭代器,end()方法返回指向最后一个元素之后位置的迭代器。
    • 示例:std::vector<int> v = {1, 2, 3}; for (std::vector<int>::iterator it = v.begin(); it!= v.end(); it++) { std::cout << *it << " "; },这里通过迭代器it来访问元素,*it表示迭代器指向的元素,输出结果也是1 2 3。在 C++ 11 及以上版本,还可以使用更简洁的范围 - based for 循环来遍历vectorfor (int element : v) { std::cout << element << " "; },同样会输出1 2 3

标签:std,初始化,示例,int,元素,C++,vector,方法
From: https://www.cnblogs.com/xiins/p/18503686

相关文章

  • Minecraft 1.21.1游戏服务器运维笔记1:Ubuntu 18.04.6折腾Fabric配置及TinyRemapper、s
    摘要本文叙述了如何在Linux服务器上通过完全命令行交互的方式配置基于Minecraft1.21.1版本的Fabric服务器,交代了环境配置流程,以及服务端文件、模组文件的下载方法,给出了命令行操作方式以及完整的游戏启动脚本。目录摘要背景需求前瞻知识及材料准备准备工作环境配置操作系......
  • C++各版本引入的新特性
    作者:momo链接:https://www.zhihu.com/question/355400393/answer/3245544440来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。以下是C++各个版本的标准库特性:C++98:引入了以下新的库特性:RTTI(运行时类型信息),包括dynamic_cast和typeid类型转换......
  • 从门面模式到 SLF4J 及其 getLogger 方法原理
    基于以下内容总结:从门面模式到Slf4j、10分钟讲清楚JavaSLF4J,Java日志框架的扛把子,从原理到实践写后端接口的时候,先写一个Service接口,这个Service接口的实现中可能会调用多个其他Service或Mapper方法来实现某个业务,对于Controller,只需要传递参数给Service方法就......
  • 每日OJ题_牛客_NC383主持人调度(一)_排序​_C++_Java
    目录牛客_NC383主持人调度(一)_排序题目解析C++代码Java代码牛客_NC383主持人调度(一)_排序主持人调度(一)_牛客题霸_牛客网(nowcoder.com)描述:        有n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第i 个活动的开始时间是starti ,第i 个活动......
  • 详解c++中的set_difference函数
    set_difference功能描述:求两个集合的差集函数原型:set_difference(iteratorbeg1,iteratorend1,iteratorbeg2,iteratorend2,iteratordest);//求两个集合的差集//注意:两个集合必须是有序序列//beg1容器1开始迭代器//end1容器1结束迭代器//beg2容......
  • C语言程序设计:现代设计方法习题笔记《chapter5》上篇
    第一题        题目分析:程序判断一个数的位数可以通过循环除以10求余,通过计算第一次与10求余为0的次数计算位数,由此可得示例1代码,另一种思路根据提示,可得示例2代码。代码示例1:#include<stdio.h>intmain(){ printf("Enteranumber:"); intnumber,temp; sc......
  • 一种巧妙的DP优化方法——pht转化
    P6944[ICPC2018WF]GemIsland之前一直都没有弄懂pht转化有什么用,现在懂了,故作文以记之。直接从CYJ的题解开始讲起,这种阶梯DP是人都想得出来,只不过是\(O(n^4)\)或者\(O(n^3ln(n))\)的,本人觉得这道题的关键在于如何优化掉整整一个\(O(n)\)首先一个数列的权值就是类似于......
  • 巧妙的dp优化方法
    \(\color{green}\textbf{[记录一种巧妙的dp优化方法]}\)这是一种巧妙的优化状态的方法,通过把状态提前(或者说是把状态转化为限制)的方法来避免记录一些别的信息,这种优化方法相比起数据结构优化更加强大,故作文记之\(\color{blue}\textbf{[例题]}\)CF1679ETypicalPartyinDorm......
  • 采样率从44100 Hz转化为采样率是 16000 Hz的音频的方法
    您好,您遇到的错误信息是:Audiofileformatdoesnotmatchexpectedformat.Expected:1channels,2-bytesamples,16000HzGot:1channels,2-bytesamples,44100Hz解释:预期格式:声道数:1(单声道)采样位深:2字节(16位)采样率:16000Hz实际格式(您的音频文件):声道数:1(......
  • 【系统设计】构建容错系统的6种有效方法:确保系统稳定性的关键策略
    在当今高度互联和依赖技术的时代,系统的可靠性和稳定性对企业和用户来说至关重要。无论是电子商务平台、金融系统还是社交媒体应用,任何系统的宕机或故障都可能导致用户体验受损,甚至带来巨大的经济损失。容错系统作为提高系统可靠性的重要手段,能够在部分组件或模块出现故障......