如何在C++中初始化和遍历vector

发布时间: 2024-05-02 15:38:59 阅读量: 79 订阅数: 42
![如何在C++中初始化和遍历vector](https://img-blog.csdnimg.cn/20210531202043971.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lpaGFuZ19IZQ==,size_16,color_FFFFFF,t_70) # 1. Vector的基本语法和操作 Vector是C++标准库中的一种动态数组,它可以存储相同类型的元素并自动管理内存分配。Vector具有以下特点: - 动态大小:Vector的大小可以根据需要自动增长或缩小。 - 连续存储:Vector中的元素在内存中连续存储,因此访问元素非常高效。 - 迭代器支持:Vector支持迭代器,可以方便地遍历元素。 # 2. Vector的初始化和赋值 ### 2.1 直接初始化 直接初始化是最简单的一种初始化方式,它直接使用大括号 `{}` 括起来的一组值来初始化一个 Vector。例如: ```cpp std::vector<int> v1 = {1, 2, 3, 4, 5}; ``` 这段代码创建了一个包含 5 个整数的 Vector,值分别为 1、2、3、4 和 5。 ### 2.2 拷贝初始化 拷贝初始化使用另一个 Vector 或数组来初始化一个新的 Vector。新 Vector 的元素将与原始 Vector 或数组中的元素相同。例如: ```cpp std::vector<int> v1 = {1, 2, 3, 4, 5}; std::vector<int> v2(v1); ``` 这段代码创建了一个新的 Vector `v2`,其内容与 `v1` 相同。 ### 2.3 列表初始化 列表初始化使用中括号 `[]` 括起来的一组值来初始化一个 Vector。与直接初始化不同,列表初始化不需要指定 Vector 的类型。例如: ```cpp std::vector v1 = {1, 2, 3, 4, 5}; ``` 这段代码创建了一个包含 5 个整数的 Vector,值分别为 1、2、3、4 和 5。 ### 2.4 范围初始化 范围初始化使用一对迭代器来初始化一个 Vector。迭代器必须指向同一容器中的元素。例如: ```cpp std::vector<int> v1 = {1, 2, 3, 4, 5}; std::vector<int> v2(v1.begin(), v1.end()); ``` 这段代码创建了一个新的 Vector `v2`,其内容与 `v1` 相同。 # 3.1 迭代器遍历 迭代器是 C++ 中一种用于遍历容器的机制。它提供了一种方法来访问容器中的元素,而无需直接访问底层数据结构。对于 Vector,我们可以使用迭代器来遍历容器中的所有元素。 #### 3.1.1 begin() 和 end() 方法 Vector 提供了两个方法来获取迭代器:begin() 和 end()。begin() 方法返回指向容器中第一个元素的迭代器,而 end() 方法返回指向容器中最后一个元素的下一个位置的迭代器。 ```cpp #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; // 使用迭代器遍历 Vector for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) { cout << *it << " "; // 输出 Vector 中的元素 } return 0; } ``` **代码逻辑分析:** * 创建一个 Vector `v`,并初始化一些值。 * 使用 `begin()` 方法获取指向第一个元素的迭代器。 * 使用 `end()` 方法获取指向最后一个元素的下一个位置的迭代器。 * 使用 `for` 循环遍历迭代器,并输出每个元素的值。 #### 3.1.2 auto 关键字 在 C++11 中,我们可以使用 `auto` 关键字来简化迭代器遍历的代码。`auto` 关键字会自动推断迭代器的类型,从而使代码更加简洁。 ```cpp #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; // 使用 auto 关键字简化迭代器遍历 for (auto it = v.begin(); it != v.end(); ++it) { cout << *it << " "; // 输出 Vector 中的元素 } return 0; } ``` **代码逻辑分析:** * 创建一个 Vector `v`,并初始化一些值。 * 使用 `begin()` 方法获取指向第一个元素的迭代器。 * 使用 `end()` 方法获取指向最后一个元素的下一个位置的迭代器。 * 使用 `for` 循环遍历迭代器,并输出每个元素的值。 使用 `auto` 关键字可以简化代码,因为它会自动推断迭代器的类型。这使得代码更加简洁易读。 # 4. Vector的常见操作 ### 4.1 添加和删除元素 Vector提供了多种方法来添加和删除元素,包括: #### 4.1.1 push_back()和pop_back()方法 * **push_back()方法:**在vector的末尾添加一个元素。 * **pop_back()方法:**删除vector末尾的元素。 **代码示例:** ```cpp #include <vector> int main() { std::vector<int> v; // 添加元素 v.push_back(10); v.push_back(20); v.push_back(30); // 删除元素 v.pop_back(); return 0; } ``` **逻辑分析:** 1. `push_back()`方法将元素10、20、30添加到vector的末尾。 2. `pop_back()`方法删除vector末尾的元素,即30。 #### 4.1.2 insert()和erase()方法 * **insert()方法:**在vector的指定位置插入一个或多个元素。 * **erase()方法:**删除vector中指定位置或范围内的元素。 **代码示例:** ```cpp #include <vector> int main() { std::vector<int> v = {10, 20, 30}; // 在指定位置插入元素 v.insert(v.begin() + 1, 15); // 删除指定位置的元素 v.erase(v.begin() + 2); return 0; } ``` **逻辑分析:** 1. `insert()`方法在vector的第二个位置插入元素15。 2. `erase()`方法删除vector中第二个位置的元素,即20。 ### 4.2 查找和排序 Vector提供了多种方法来查找和排序元素,包括: #### 4.2.1 find()和count()方法 * **find()方法:**返回vector中第一个匹配指定值的元素的迭代器。如果未找到,则返回vector的结束迭代器。 * **count()方法:**返回vector中指定值的出现次数。 **代码示例:** ```cpp #include <vector> int main() { std::vector<int> v = {10, 20, 30, 20, 10}; // 查找元素 auto it = std::find(v.begin(), v.end(), 20); // 计算元素出现次数 int count = std::count(v.begin(), v.end(), 10); return 0; } ``` **逻辑分析:** 1. `find()`方法返回第一个匹配值20的元素的迭代器,即指向vector中第二个元素的迭代器。 2. `count()`方法返回值10在vector中出现的次数,即2。 #### 4.2.2 sort()和reverse()方法 * **sort()方法:**对vector中的元素进行排序(默认升序)。 * **reverse()方法:**将vector中的元素反转。 **代码示例:** ```cpp #include <vector> int main() { std::vector<int> v = {30, 10, 20}; // 对元素进行排序 std::sort(v.begin(), v.end()); // 反转元素 std::reverse(v.begin(), v.end()); return 0; } ``` **逻辑分析:** 1. `sort()`方法将vector中的元素排序为{10, 20, 30}。 2. `reverse()`方法将排序后的vector反转为{30, 20, 10}。 # 5. Vector的进阶应用 ### 5.1 Vector的内存管理 Vector在动态分配内存时,可能会存在内存浪费的情况。为了优化内存管理,Vector提供了以下方法: - **reserve()方法:** 预留指定大小的内存空间。当向Vector中添加元素时,如果剩余空间不足,则会重新分配更大的内存空间。reserve()方法可以避免频繁的内存重新分配,提高效率。 ```cpp vector<int> v; v.reserve(100); // 预留100个元素的空间 ``` - **capacity()方法:** 返回Vector当前分配的内存空间大小。 ```cpp cout << v.capacity() << endl; // 输出Vector分配的内存空间大小 ``` - **shrink_to_fit()方法:** 将Vector的内存空间缩减到实际元素数量所需的大小。这可以释放多余的内存空间,减少内存浪费。 ```cpp v.shrink_to_fit(); // 将Vector的内存空间缩减到实际元素数量所需的大小 ``` ### 5.2 Vector的自定义比较器 在使用Vector进行排序时,默认情况下使用`<`运算符进行比较。为了自定义排序规则,Vector提供了自定义比较器的功能。 - **函数对象:** 函数对象是一种可以被调用并返回一个值的类。我们可以定义一个函数对象,重载`<`运算符,实现自定义的比较逻辑。 ```cpp struct MyComparator { bool operator()(const int& a, const int& b) { return a > b; // 降序排序 } }; ``` - **lambda表达式:** lambda表达式是一种匿名函数,可以方便地定义自定义比较器。 ```cpp vector<int> v = {1, 3, 2, 4, 5}; sort(v.begin(), v.end(), [](const int& a, const int& b) { return a > b; }); // 降序排序 ```
corwn 最低0.47元/天 解锁专栏
买1年送3个月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

SW_孙维

开发技术专家
知名科技公司工程师,开发技术领域拥有丰富的工作经验和专业知识。曾负责设计和开发多个复杂的软件系统,涉及到大规模数据处理、分布式系统和高性能计算等方面。
专栏简介
本专栏深入探讨了 C++ 中 Vector 的广泛应用,从基本用法到高级操作。它涵盖了 Vector 的初始化、遍历、大小和容量的区别,以及添加、删除和遍历元素的方法。专栏还介绍了使用迭代器操作 Vector 的技巧,以及如何清空、管理内存和比较 Vector。此外,它提供了优化性能、处理内存泄漏、存储二维数组、进行二分查找、批量插入数据、实现深拷贝和避免迭代器失效的实用指南。最后,专栏展示了如何使用 Vector 构建图数据结构,突显了其在数据处理和算法中的强大功能。
最低0.47元/天 解锁专栏
买1年送3个月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

【R语言数据可视化】:evd包助你挖掘数据中的秘密,直观展示数据洞察

![R语言数据包使用详细教程evd](https://opengraph.githubassets.com/d650ec5b4eeabd0c142c6b13117c5172bc44e3c4a30f5f3dc0978d0cd245ccdc/DeltaOptimist/Hypothesis_Testing_R) # 1. R语言数据可视化的基础知识 在数据科学领域,数据可视化是将信息转化为图形或图表的过程,这对于解释数据、发现数据间的关系以及制定基于数据的决策至关重要。R语言,作为一门用于统计分析和图形表示的编程语言,因其强大的数据可视化能力而被广泛应用于学术和商业领域。 ## 1.1 数据可

R语言parma包:探索性数据分析(EDA)方法与实践,数据洞察力升级

![R语言parma包:探索性数据分析(EDA)方法与实践,数据洞察力升级](https://i0.hdslb.com/bfs/archive/d7998be7014521b70e815b26d8a40af95dfeb7ab.jpg@960w_540h_1c.webp) # 1. R语言parma包简介与安装配置 在数据分析的世界中,R语言作为统计计算和图形表示的强大工具,被广泛应用于科研、商业和教育领域。在R语言的众多包中,parma(Probabilistic Models for Actuarial Sciences)是一个专注于精算科学的包,提供了多种统计模型和数据分析工具。 ##

【R语言社交媒体分析全攻略】:从数据获取到情感分析,一网打尽!

![R语言数据包使用详细教程PerformanceAnalytics](https://opengraph.githubassets.com/3a5f9d59e3bfa816afe1c113fb066cb0e4051581bebd8bc391d5a6b5fd73ba01/cran/PerformanceAnalytics) # 1. 社交媒体分析概览与R语言介绍 社交媒体已成为现代社会信息传播的重要平台,其数据量庞大且包含丰富的用户行为和观点信息。本章将对社交媒体分析进行一个概览,并引入R语言,这是一种在数据分析领域广泛使用的编程语言,尤其擅长于统计分析、图形表示和数据挖掘。 ## 1.1

【R语言生存分析大师】:evdbayes包生存数据建模技巧

![【R语言生存分析大师】:evdbayes包生存数据建模技巧](https://opengraph.githubassets.com/cd67518f8e3c9bbb2c5241560360217b9b1b735b854e9b297de6f86466f7dc4c/mhdadk/maximum-likelihood-estimation) # 1. R语言与生存分析基础 在现代数据分析和生物统计学中,生存分析是一个核心领域,它关注数据的生存时间(或失效时间)和相关风险因素。R语言由于其强大的统计功能和开源特性,在生存分析领域扮演着重要的角色。本章将介绍R语言的基础知识,以及生存分析的基本概念

【自定义数据包】:R语言创建自定义函数满足特定需求的终极指南

![【自定义数据包】:R语言创建自定义函数满足特定需求的终极指南](https://media.geeksforgeeks.org/wp-content/uploads/20200415005945/var2.png) # 1. R语言基础与自定义函数简介 ## 1.1 R语言概述 R语言是一种用于统计计算和图形表示的编程语言,它在数据挖掘和数据分析领域广受欢迎。作为一种开源工具,R具有庞大的社区支持和丰富的扩展包,使其能够轻松应对各种统计和机器学习任务。 ## 1.2 自定义函数的重要性 在R语言中,函数是代码重用和模块化的基石。通过定义自定义函数,我们可以将重复的任务封装成可调用的代码

TTR数据包在R中的实证分析:金融指标计算与解读的艺术

![R语言数据包使用详细教程TTR](https://opengraph.githubassets.com/f3f7988a29f4eb730e255652d7e03209ebe4eeb33f928f75921cde601f7eb466/tt-econ/ttr) # 1. TTR数据包的介绍与安装 ## 1.1 TTR数据包概述 TTR(Technical Trading Rules)是R语言中的一个强大的金融技术分析包,它提供了许多函数和方法用于分析金融市场数据。它主要包含对金融时间序列的处理和分析,可以用来计算各种技术指标,如移动平均、相对强弱指数(RSI)、布林带(Bollinger

R语言YieldCurve包优化教程:债券投资组合策略与风险管理

# 1. R语言YieldCurve包概览 ## 1.1 R语言与YieldCurve包简介 R语言作为数据分析和统计计算的首选工具,以其强大的社区支持和丰富的包资源,为金融分析提供了强大的后盾。YieldCurve包专注于债券市场分析,它提供了一套丰富的工具来构建和分析收益率曲线,这对于投资者和分析师来说是不可或缺的。 ## 1.2 YieldCurve包的安装与加载 在开始使用YieldCurve包之前,首先确保R环境已经配置好,接着使用`install.packages("YieldCurve")`命令安装包,安装完成后,使用`library(YieldCurve)`加载它。 ``

【R语言项目管理】:掌握RQuantLib项目代码版本控制的最佳实践

![【R语言项目管理】:掌握RQuantLib项目代码版本控制的最佳实践](https://opengraph.githubassets.com/4c28f2e0dca0bff4b17e3e130dcd5640cf4ee6ea0c0fc135c79c64d668b1c226/piquette/quantlib) # 1. R语言项目管理基础 在本章中,我们将探讨R语言项目管理的基本理念及其重要性。R语言以其在统计分析和数据科学领域的强大能力而闻名,成为许多数据分析师和科研工作者的首选工具。然而,随着项目的增长和复杂性的提升,没有有效的项目管理策略将很难维持项目的高效运作。我们将从如何开始使用

R语言数据包可视化:ggplot2等库,增强数据包的可视化能力

![R语言数据包可视化:ggplot2等库,增强数据包的可视化能力](https://i2.hdslb.com/bfs/archive/c89bf6864859ad526fca520dc1af74940879559c.jpg@960w_540h_1c.webp) # 1. R语言基础与数据可视化概述 R语言凭借其强大的数据处理和图形绘制功能,在数据科学领域中独占鳌头。本章将对R语言进行基础介绍,并概述数据可视化的相关概念。 ## 1.1 R语言简介 R是一个专门用于统计分析和图形表示的编程语言,它拥有大量内置函数和第三方包,使得数据处理和可视化成为可能。R语言的开源特性使其在学术界和工业

量化投资数据探索:R语言与quantmod包的分析与策略

![量化投资数据探索:R语言与quantmod包的分析与策略](https://opengraph.githubassets.com/f90416d609871ffc3fc76f0ad8b34d6ffa6ba3703bcb8a0f248684050e3fffd3/joshuaulrich/quantmod/issues/178) # 1. 量化投资与R语言基础 量化投资是一个用数学模型和计算方法来识别投资机会的领域。在这第一章中,我们将了解量化投资的基本概念以及如何使用R语言来构建基础的量化分析框架。R语言是一种开源编程语言,其强大的统计功能和图形表现能力使得它在量化投资领域中被广泛使用。