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

相关文章

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言