c++ vector容器构造与数据存放

2024-08-29 03:04

本文主要是介绍c++ vector容器构造与数据存放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  Vertor容器是什么?

         在 C++ 的标准模板库(STL)中,std::vector 是一种序列容器,它封装了动态大小数组的行为。vector 容器允许用户在序列的尾部高效地添加(或删除)元素,并能够像普通数组一样通过索引访问元素。

类似于单链数组,可以进行动态扩展,若原空间不足,而是找一个更大的空间,将数据复制到新空间,然后十分原来的空间

std::vector 容器的一些主要特性:

  1. 动态数组std::vector 可以根据需要自动调整大小,这使得它能够存储任意数量的元素。

  2. 连续内存存储std::vector 在内存中为元素分配连续的空间,这意味着它能够提供对元素的快速随机访问。

  3. 随机访问迭代器std::vector 提供了随机访问迭代器,允许用户以常数时间复杂度访问任何元素。

  4. 在尾部高效地添加和删除元素std::vector 支持在序列尾部快速地添加(push_back)和删除(pop_back)元素。

  5. 容量和大小std::vector 维护了容器的当前大小(size)和分配的内存容量(capacity),容量通常大于或等于大小。

  6. 范围检查:与普通数组不同,std::vector 在访问超出其大小的元素时会抛出异常(默认情况下),这有助于避免越界错误。

  7. 容器操作std::vector 提供了多种操作,如插入(insert)、删除(erase)、清空(clear)和反转(reverse)等。

  8. 构造函数和析构函数std::vector 有多种构造函数,允许用户创建具有特定大小或初始化值的向量,以及从现有数组或迭代器范围初始化的向量。

  9. 内存管理std::vector 自动管理内存分配和释放,用户不需要手动管理内存。

  10. 模板类型std::vector 是一个模板类,可以存储任何类型的元素,包括用户定义的类型。

向vector容器存放内置数据

实例代码+注释

#include<iostream>
#include<vector>
#include<algorithm>//标准算法头文件
using namespace std;
void test()
{//创建一个vector容器,表示一个动态数组,用于存储整数类型的元素。vector<int>v;//向容器中插入数据v.push_back(10);v.push_back(10);v.push_back(10);v.push_back(10);//通过迭代器访问容器中 数据// ::iterator:这是 std::vector 类的一个类型定义,它定义了可以遍历向量元素的迭代器类型。//itBegin:这是一个变量名,用于存储迭代器//v.begin():这是一个成员函数,它返回一个指向向量 v 的第一个元素的迭代器。//v.end():它返回一个指向向量 v 的最后一个元素的指针,结束迭代器vector<int>::iterator itBegin = v.begin();vector<int>::iterator itEnd = v.end();//遍历方式for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << endl;}
}

利用标准算法遍历 for_each

需要包含标准算法头文件#include<algorithm>

void print(int val)
{cout << val << endl;
}
for_each(v.begin(), v.end(), print);

vector容器中存放自定义数据类型

class Person
{
public:Person(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};void test()
{//创建vector容器 v  存放Person类型数据vector<Person>v;Person p1("a", 10);Person p2("b", 20);Person p3("b", 30);//尾插法向容器中添加数据v.push_back(p1);v.push_back(p2);v.push_back(p3);//遍历容器中数据for (vector<Person>::iterator it = v.begin(); it != v.end(); it++){//it本质 是一个指针,取值需要解引用cout << "姓名: " << (*it).m_Name << "年龄: "<< (*it).m_Age << endl;}
}

存放地址数据!

vector存放是的person* 是一个指针类型数据,容器中存放的是地址!其中(*it)是解引用出来的一个指针,利用指针拿到数据。

(**it)是先解引用得到Person类型的一个指针,然后再次解引用得到Person本身,随后就可以操作里面的数据了。

void test()
{//创建vector容器 v  存放Person类型数据vector<Person*>v;Person p1("a", 10);Person p2("b", 20);Person p3("b", 30);//尾插法向容器中添加数据v.push_back(&p1);v.push_back(&p2);v.push_back(&p3);//遍历容器中数据for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++){//it本质 是一个指针,取值需要解引用cout << "姓名: " << (**it).m_Name << "年龄: "<< (**it).m_Age << endl;//也可以cout << "姓名: " << (*it)->m_Name << "年龄: " << (*it)->m_Age << endl;}
}

Vector容器的构造函数

默认构造 无参构造

void test1()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}
}

通过区间方式构造

将v.begin(),于v.end()区间中的数据拷贝给其本身

vector<int>v2(v1.begin(),v1.end())

构造n个elem拷贝给本身  例:往容器中放入 十个100

vector<int>v3(10,100)

拷贝构造 将v3复制传给v4

vector<int>v4(v3)

这篇关于c++ vector容器构造与数据存放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转