初始vector——数组的高级产物

前言:

C++ 标准模板库(STL)是现代 C++ 编程的基石,其中的容器、算法和迭代器为开发者提供了高效、灵活的数据处理工具。vector 作为 STL 中最常用的顺序容器,不仅支持动态数组的功能,还通过自动内存管理和丰富的操作接口,极大简化了数据操作的复杂性。无论是在日常开发还是算法竞赛中,vector 的高效性和灵活性都使其成为开发者的首选。

本文将详细介绍vector的用法及逻辑,带领读者逐步实现对vector这一动态数组从入门到精通,感悟C++对比C语言的超脱与精妙之处。

一.容器的引入

C++ 提供了丰富的标准模板库 (STL),包括 顺序容器(如 vector)、关联容器(如 mapset)等。vector 是最常用的 STL 顺序容器之一,它的特点是支持 动态数组,可以在运行时自动扩展容量,提供高效的随机访问。

其中其他容器会在后续逐个介绍,本文重点讲解vector的相关语法。

二.vector的简要介绍

1.含义

vector是表示可变大小数组的序列容器。

其存储方式与数组类似,都是一片区域空间的连续存储,但是数组的大小在初始化时就已经确定,

而vectotr支持在使用时动态改变大小。

使用对比如下:

使用C语言创建一个数组:
 

int arr[5] = {1, 2, 3, 4, 5};

容器初使用:

#include <vector>
using namespace std;

vector<int> v = {1, 2, 3, 4, 5};  // 自动管理内存和大小

2.优劣对比

优点:支持[]随机访问,动态分配大小,使用灵活效率高

缺点:插入数据时只有尾插较为切换,其他插入与删除数据设计数组元素的大量移动,效率较低。 

三.vector的构造函数

1.常用示例

C++提供了多种构造函数,以应对不同情况下的参数传递。

示例如下:

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

int main() {
    vector<int> v1;                    // 空 vector
    vector<int> v2(5, 100);            // 5个100的元素
    vector<int> v3(v2);                // 拷贝构造
    vector<int> v4 = {1, 2, 3, 4, 5};  // 使用初始化列表

    for (int i : v4) {
        cout << i << " ";  // 输出: 1 2 3 4 5
    }
    return 0;
}

 输出:1 2 3 4 5

2.具体文档

vector的详细用法与介绍见以下文档。

cplusplus.com/reference/vector/vector/

四.vector容积大小相关操作

C++针对vector的动态分配功能,提供了多个函数。

 1.示例操作

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

int main() {
    vector<int> v = {1, 2, 3, 4, 5};

    cout << "Size: " << v.size() << endl;         // 当前元素个数
    cout << "Capacity: " << v.capacity() << endl; // 当前容量
    v.resize(10, 100);                            // 调整大小到10
    cout << "After resize: " << v.size() << endl;
    v.reserve(20);                                // 预留空间
    cout << "Capacity after reserve: " << v.capacity() << endl;
    v.shrink_to_fit();                            // 收缩容量
    cout << "Capacity after shrink_to_fit: " << v.capacity() << endl;

    return 0;
}

输出:

Size: 5
Capacity: 5//说明还没扩容
After resize: 10
Capacity after reserve: 20
Capacity after shrink_to_fit: 10
 

分析:

1.原先元素个数为5,容积也为5(初始情况下容积大小不一定等于元素个数大小! 不同环境下情况可能不同!)

2.使用resize后,将数组元素个数拓展到10个,由于给出了扩容后的默认值为100,因此数组会再增加5个值为100的元素。

3.使用reserve和shrink_to_fit函数改变了容积的大小。

注意:

1.无论是reserve还是shrink_to_fit,都不会导致数组容积小于元素个数这种情况发生,更不会改变数组内的元素情况

2.如果reserve和shrink_to_fit的参数n小于元素个数,编译器有两种选择,要么直接忽视,要么将容积缩小到略大于元素个数为止。并且,shrink_to_fit在遭遇这种情况时,还可能会导致vector数组元素空间的重新分配,但是并不影响数组的元素本身。

3.resize则可以改变元素个数,如果参数n小于当前元素个数,则会直接删除后续元素直到元素个数为n。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值