C++中使用vector存储并遍历数据的基本步骤

2025-01-30 04:50

本文主要是介绍C++中使用vector存储并遍历数据的基本步骤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C...

在C++中,容器是用于存储和管理一组数据对象的类模板。C++标准模板库(STL)提供了几种主要的容器类型,每种容器都有其特定的用途和特性。

(1)容器及简要描述

以下是C++中一些主要的容器及其简要描述:

  • ‌顺序容器‌

    • vector:一个动态数组,可以随机访问元素,且在尾部添加或删除元素效率较高。
    • deque(双端队列):一个双端动态数组,支持在头部和尾部添加或删除元素。
    • list:一个双向链表,支持在任何位置快速插入和删除元素,但不支持随机访问。
    • forward_list:一个单向链表,比list更轻量级,但只支持单向遍历。
    • array:一个固定大小的数组,大小在编译时确定,不支持动态改变大小。
  • ‌关联容器‌

    • set:一个集合,存储唯一且有序的元素,底层通常实现为红黑树。
    • multiset:与set类似,但允许存储重复元素。
    • map:一个键值对容器,其中每个键都是唯一的,且按键排序,底层通常也实现为红黑树。
    • multimap:与map类似,但允许键重复。
  • ‌无序关联容器‌(基于哈希表):

    • unordered_set:一个集合,存储唯一元素,但不保证元素顺序,底层实现为哈希表。
    • unordered_multiset:与unordered_set类似,但允许存储重复元素。
    • unordered_map:一个键值对容器,键唯一,但不保证键的顺序,底层实现为哈希表。
    • unordered_multimap:与unordered_map类似,但允许键重复。
  • ‌容器适配器‌:

    • stack:一个后进先出(LIFO)的容器适配器,通常基于dequevector实现。
    • queue:一个先进先出(FIFO)的容器适配器,通常基于deque实现。
    • priority_queue:一个优先队列,元素根据优先级排序,通常基于vector并使用堆排序算法实现。

每种容器都有其特定的接口和成员函数,用于管理其存储的数据。选择哪种容器取决于具体的应用场景和需求,比如数据的访问模式、插入和删除操作的频率、是否需要有序存储等。

在使用C++容器时,了解它们的性能特征和底层实现对于编写高效代码至关重要。例如,vector在添加元素时可能需要重新分配内存和复制数据,而list在插入和删除元素时则不需要移动其他元素,但访问元素的速度较慢。因此,在选择容器时,需要根据具体的应用场景进行权衡。

(2)使用 vector 存储和遍历数据的基本步骤

在C++中,vector 是一个非常灵活的容器,它能够存储任何类型的对象,并且能够动态地增长和缩小。下面是如何使用 vector 存储和遍历数据的基本步骤:

1. 包含头文件

首先,需要包含 <vector> 头文件来使用 vector

#include <vector>

2. 创建 vector

可以创建一个 vector 来存储特定类型的元素。例如,创建一个存储整数的 vector

std::vector<int> numbers;

3. 向 vector 中添加元素

可以使用 push_back() 方法向 vector 中添加元素。

numbers.push_back(10);
numbers.push_back(20);
numbers.push_back(30);

4. 遍历 vector

有几种方法可以遍历 vector 中的元素:

方法1:使用范围for循环(C++11及以后)

for (int number : numbers) {
    std::cout << number << " ";
}

std::cout << std::endl;

方法2:使用迭代器

for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
    std::cout << *it << " ";
}

std::cout << std::endl;

方法3:使用下标访问(不推荐在循环中使用,除非你知道索引)

for (size_t i = 0; i &lt; numbers.size(); ++i) {
    std::cout &lt;&lt; numbers[i] &lt;&lt; " ";
}

std::cout &lt;&lt; std::endl;

方法4:使用 auto 关键字(C++11及以后)简化迭代器写法

for (auto it = numbers.begin(); it != numbers.end(); ++it) {
    std::cout <php;< *it << " ";
}

std::cout << std::endl;

5. 使用标准库算法(可选)

也可以使用标准库中的算法,如 std::for_each,来遍历 vector

#include <algorithm> // 包含算法头文件

#include <IOStream> // 包含输入输出流头文件

std::for_each(numbers.begin(), numbers.end(), [](int n) { std::cout << n << " "; });

std::cout << std::endl;

这些是使用 vector 存储和遍历数据的基本方法。

(3)简单实例

在C++中,std::vector 是一个动态数组,能够根据需要自动调整其大小,非常适合用于存储和管理数据。以下是一个简单的示例,展示了如何使用 std::vector 存储和遍历数据。

示例代码

#include <iostream>
#include <vectphpor>

int main() {
    // 创建一个整数类型的vector
    std::vector<int> numbers;

    // 向vector中添加数据
    numbers.push_back(10);
    numbers.pushjs_back(20);
    numbers.push_back(30);
    numbers.push_back(40);
    numbers.push_back(50);

    // 使用范围for循环遍历vector并输出数据
    std::cout << "Using range-based for loop:" << std::endl;
    for (int number : numbers) {
        std::cout << number << " ";
    }
    std::cout << std::endl;

    // 使用传统的索引for循环遍历vector并输出数据
    std::cout << "Using traditional for loop:" << std::endl;
    for (size_t i = 0; i < numbers.size(); ++i) {
        std::cout << numChina编程bers[i] << " ";
    }
    std::cout << std::endl;

    // 使用迭代器遍历vector并输出数据
    std::cout << "Using iterator:" << std::endl;
    for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

解释

  • 包含头文件‌:

    • #include <iostream> 用于输入输出流。
    • #include <vector> 用于使用 std::vector 容器。
  • 创建vector‌:

    • std::vector<int> numbers; 创建一个整数类型的 vector
  • 添加数据‌:

    • numbers.push_back(10); 向 vector 末尾添加数据。
  • 范围for循环遍历‌:

    • for (int number : numbers) 使用范围for循环,简洁地遍历 vector 中的每一个元素。
  • 传统索引for循环遍历‌:

    • for (size_t i = 0; i < numbers.size(); ++i) 使用传统的索引for循环,通过下标访问 vector 中的元素。
  • 迭代器遍历‌:

    • for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) 使用迭代器遍历 vector,这种方式在需要对 vector 进行修改时非常有用。

注意事项

  • std::vector 会自动管理内存,当添加新元素时,它会自动调整大小。
  • 使用 push_back 方法可以在 vector 末尾添加元素。
  • 访问 vector 元素时要注意不要越界,可以使用 size() 方法获取 vector 的大小。
  • 使用迭代器时,可以通过 begin() 和 end() 方法获取迭代器的起始和结束位置。

通过以上方法,可以方便地使用 std::vector 存储和遍历数据。

总结

到此这篇关于C++中使用vector存储并遍历数据的文章就介绍到这了,更多相关C++ vector存储并遍历数据内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于C++中使用vector存储并遍历数据的基本步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153269

相关文章

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写