48.C++ vector容器(模板类)

这篇具有很好参考价值的文章主要介绍了48.C++ vector容器(模板类)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天学习了C++中的vector容器,它提供动态数组功能,方便管理和存储数据。支持动态调整大小,简化了数组操作,使代码更灵活、高效。实在是太牛了,后悔没有早点学习容器。

目录

一、vector简介

二、头文件和命名空间 

三、vector的基本用法 

(1)初始化

(2)访问元素

 (3)遍历所有元素

 (4)添加元素

四、vector和数组的区别 


一、vector简介

        数组尽管很灵活,但使用起来还是很多不方便。为此,C++语言定义了扩展的“抽象数据类型”,放在“标准库”中。

        对数组功能进行扩展的一个标准库类型,就是“容器”vector。顾名思义,vector“容纳”着一堆数据对象,其实就是一组类型相同的数据对象的集合。

std::vector 是 C++ 标准库提供的一个动态数组容器,用于存储一系列连续的元素。

二、头文件和命名空间 

        vector是标准库的一部分。要想使用vector,必须在程序中包含<vector>头文件,并使用std命名空间。 

#include <vector>
using namespace std;

        在vector头文件中,对vector这种类型做了定义;使用#include引入它之后,并指定命名空间std之后,我们就可以在代码中直接使用vector了。

三、vector的基本用法 

        vector其实是C++中的一个“类模板”,是用来创建类的“模子”。所以在使用时还必须提供具体的类型信息,也就是说,这个容器中到底要容纳什么类型的数据对象;具体的形式是在vector后面跟一个尖括号<>,里面填入具体类型信息。

#include <vector>
using namespace std;

vector<int> v1;

(1)初始化

#include <iostream>
#include <vector>
using namespace std;

int main() {
	// 默认初始化,不含任何元素
	vector<int> v1;
	// 列表初始化
	vector<char> v2 = { 'a', 'b', 'c' };
	// 省略等号的列表初始化
	vector<short> v3{1, 2, 3, 4, 5};

	// 只定义长度,元素初值默认初始化,容器中有5个0
	vector<int> v4(5);
	// 定义长度和初始值,容器中有5个100
	vector<long> v5(5, 100);

	return 0;
}

这里有几种不同的初始化方式:

  1. 默认初始化一个vector对象,就是一个空容器,里面不含任何元素;
  2. C++ 11之后可以用花括号括起来的列表,对vector做初始化;等号可以省略;这种方式是把一个列表拷贝给了vector,称为“拷贝初始化”
  3. 可以用小括号表示初始化vector的长度,并且可以给所有元素指定相同的初始值;这种方式叫做“直接初始化”

(2)访问元素

同样可以用下标操作符来获取对应索引的元素,这一点跟数组非常相似。

48.C++ vector容器(模板类),C++,c++,开发语言

需要注意:

  1. vector内元素的索引,也是从0开始;
  2. vector索引最大值为 (vector长度 - 1),不能越界访问;如果直接越界访问并赋值,有可能导致非常严重的后果,出现安全问题

 (3)遍历所有元素

        vector中有一个可以调用的函数size(),只要调用它就能直接得到vector的长度(即元素个数):

        调用的方式是一个vector对象后面跟上一个点,再跟上size()。这种基于对象来调用的函数叫做“成员函数”。

48.C++ vector容器(模板类),C++,c++,开发语言

 (4)添加元素

vector的长度并不是固定的,所以可以向一个定义好的vector添加元素。

48.C++ vector容器(模板类),C++,c++,开发语言

        这里的push_back同样是一个成员函数,调用它的时候在小括号里传入想要添加的数值,就可以让vector对象中增加一个元素了。

        这就使得我们在创建vector对象时不需要知道元素个数,使用更加灵活,避免了数组中的缺陷。

四、vector和数组的区别 

  1. 大小调整:

    • 数组:数组的大小在创建时就确定了,后续无法改变,即静态大小。如果需要调整数组大小,需要重新创建一个新的数组并拷贝数据。
    • vector:vector 的大小是动态调整的,可以根据需要随时增加或减少元素,即动态大小。vector 会自动处理内部的内存管理,避免了手动重新分配内存的麻烦。
  2. 内存管理:

    • 数组:数组在栈上分配内存,通常具有较小的容量。对于大型数组,可能会导致栈溢出,因此通常使用堆内存动态分配。
    • vector:vector 在堆上分配内存,可以存储更大量的数据,并且自动处理内存管理,不需要手动释放内存。
  3. 增删元素的效率:

    • 数组:在数组中插入或删除元素比较低效,因为需要移动其他元素来填补空位。
    • vector:vector 的插入和删除元素的操作相对高效,特别是在尾部进行插入和删除操作。但在中间或头部进行插入和删除,仍然涉及元素的移动。
  4. 参数传递:

    • 数组:数组作为函数参数传递时,通常会退化为指针,丧失了长度信息,需要额外传递数组长度参数。
    • vector:vector 可以作为函数参数传递,它包含了自身的长度信息,无需额外传递大小。
  5. STL功能:

    • 数组:C++ 原生数组不是标准库的一部分,没有提供丰富的容器功能。
    • vector:vector 是 C++ 标准库提供的容器,拥有丰富的操作函数,可以方便地进行元素访问、插入、删除等操作。

综上所述,vector 相对于数组来说更加灵活和方便,特别适用于需要动态管理大小和使用丰富容器功能的场景。而数组则更适用于静态大小和对内存管理有特殊要求的情况。

在学习和使用std::vector这个强大的C++容器时,我深刻体会到其灵活性和便利性。std::vector能够动态调整大小、支持随机访问,简化了数组操作和内存管理。它在各种场景下都发挥着重要的作用,让我们】在编程的世界中更加得心应手。文章来源地址https://www.toymoban.com/news/detail-634160.html

到了这里,关于48.C++ vector容器(模板类)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vector<T> 动态数组(模板语法)

    C++数据结构与算法 目录 1 C++自学精简教程 目录(必读) 2 动态数组 Vector(难度1) 其中,2 是 1 中的一个作业。2 中详细讲解了动态数组实现的基本原理。 1 学会写基本的C++类模板语法; 2 为以后熟练使用 STL 打下基础; 3 为更进一步的阅读和掌握更多的C++库打下基础; 模板语

    2024年02月10日
    浏览(27)
  • 16 标准模板库STL之vector

    基础知识         1、vector和数组有点类似,但它比数组更好用。一般来说,数组的长度是不能动态拓展的,因此就需要考虑长度到底多大合适。长度不能过大,否则浪费内存;也不能过小,否则内存不够。vector正好弥补了这个缺陷,相当于一个可以自动改变数组长度的动

    2023年04月17日
    浏览(36)
  • 2.2 Vector<T> 动态数组(模板语法)

    C++数据结构与算法 目录 1 C++自学精简教程 目录(必读) 2 动态数组 Vector(难度1) 其中,2 是 1 中的一个作业。2 中详细讲解了动态数组实现的基本原理。 1 学会写基本的C++类模板语法; 2 为以后熟练使用 STL 打下基础; 3 为更进一步的阅读和掌握更多的C++库打下基础; 模板语

    2024年02月10日
    浏览(26)
  • C++---vector容器

    是STL容器中的一种常用的容器,由于其大小(size)可变,常用于数组大小不可知的情况下来替代数组。vector容器与数组十分相似,被称为动态数组。时间复杂度为O(1)。 数组数据通常存储在栈中,vector数据通常存储在堆中。 动态扩展不是在原空间后加入空间,而是寻找更大空

    2024年04月14日
    浏览(26)
  • vector容器 常用函数

    vector是STL(标准模板库)中最常见的容器,它是一种顺序容器,支持随机访问。可以用sort对其进行排序,底层数据结构是数组,可以随机访问元素。 vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间

    2024年02月21日
    浏览(20)
  • Vector容器的详细介绍

    1.1 功能:   -vector 数据结构和数组非常相似,也称单端数组 1.2 vector与普通数组区别:   - 不同之处在于数组是静态空间,而vector可以动态拓展 1.3 动态拓展:   并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。   vector容

    2024年01月23日
    浏览(31)
  • STL : vector 矢量容器

    目录 Vector Capacity Elements access Modifiers Allocator Non-member Notice overloads Template specializations #includevector    using namespace std; 矢量容器 :单向开口的连续内存空间,底层封装:数组; 预留内存空间不够时,可以动态扩展(容器满了则新建容器同时进行拷贝); 顺序序列:容器元素按

    2023年04月15日
    浏览(32)
  • C++中的vector容器

      vector是封装动态数组的顺序容器。   就像数组一样,vector也采用的连续存储空间来存储元素。这也就意味着我们可以通过下标来获取vector的元素,和数组一样高效。但是又不像数组,vector的大小是可以动态改变的,且它的大小会被容器自动处理。   本质上,vector使

    2023年04月24日
    浏览(37)
  • C++提高编程——STL:string容器、vector容器

    本专栏记录C++学习过程包括C++基础以及数据结构和算法,其中第一部分计划时间一个月,主要跟着黑马视频教程,学习路线如下, 不定时更新,欢迎关注 。 当前章节处于: ---------第1阶段-C++基础入门 ---------第2阶段实战-通讯录管理系统, ---------第3阶段-C++核心编程, -----

    2024年01月23日
    浏览(32)
  • 【C++】vector容器初步模拟

    送给大家一句话: 努力一点,漂亮—点,阳光一点。早晚有一天,你会惊艳了时光,既无人能替,又光芒万丈。 今天我我来进行vector的模拟实现,先简单的实现一下初步功能,使其对内置类型可以适配。(大部分与string很类似) vector是表示 可变大小数组 的序列容器。 就像

    2024年04月08日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包