C++(23):容器类<vector>

目录

一、核心概念

二、基本语法

[1. 头文件](#1. 头文件)

[2. 声明与初始化](#2. 声明与初始化)

三、常用操作

四、具体实例

1、size()、front()、back()

2、push_back()、pop_back()、capacity()

3、reserve()


一、核心概念

Vectors 包含着一系列连续存储的元素,其行为和数组类似。

C++标准模板库(STL)是C++标准库的核心组件,提供了一套通用的数据结构和算法模板。其中<vector>是最常用的容器之一,实现了动态数组的功能。

vector是一种序列容器,内部使用动态分配的数组存储元素。它支持快速随机访问,可以通过下标直接访问任意元素,时间复杂度为O(1)。与普通数组不同,vector能自动管理内存,当元素数量超过当前容量时会自动扩容,通常按原有容量的1.5或2倍进行扩展。

二、基本语法

1. 头文件

在 C++ 中,使用 <vector> 需要包含头文件 <vector>。

cpp 复制代码
#include <vector>
2. 声明与初始化

<vector> 需要指定元素类型,可通过多种方式进行初始化。

cpp 复制代码
vector<T> vec;            // 默认初始化(空vector)
vector<T> vec(n);         // 创建包含n个默认初始化元素的vector
vector<T> vec(n, value);  // 创建包含n个值为value的元素的vector
vector<T> vec{1, 2, 3};  // 初始化列表(C++11)


#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1;                  // 空的vector
    std::vector<int> vec2(5);               // 长度为5的vector,元素默认初始化
    std::vector<int> vec3(5, 10);           // 长度为5的vector,元素值为10
    std::vector<int> vec4 = {1, 2, 3, 4};   // 使用初始化列表初始化

    return 0;
}
cpp 复制代码
//声明一个 vector
std::vector<int> myVector;

//添加元素
myVector.push_back(10);

//访问元素
int firstElement = myVector[0];

//获取元素数量
size_t size = myVector.size();

//清空 vector
myVector.clear();

三、常用操作

方法/操作 功能描述 时间复杂度
vec.push_back(x) 在末尾添加元素 O(1)平均
vec.pop_back() 删除末尾元素 O(1)
vec.size() 返回当前元素数量 O(1)
vec.empty() 检查是否为空 O(1)
vec[i] 通过下标访问元素(无边界检查) O(1)
vec.at(i) 通过下标访问元素(带边界检查) O(1)
vec.front() 访问第一个元素 O(1)
vec.back() 访问最后一个元素 O(1)
vec.clear() 清空所有元素 O(n)

四、具体实例

1、size()、front()、back()

cpp 复制代码
#include <iostream>
#include <vector>

using namespace std;

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

    // 遍历输出所有元素
    cout << "向量元素:";
    for (int i = 0; i < vec.size(); ++i) {
        cout << vec[i] << " ";
    }
    cout << endl;

    // 获取首尾元素
    cout << "首元素:" << vec.front() << endl;
    cout << "末元素:" << vec.back() << endl;

    return 0;
}
cpp 复制代码
#include <iostream>
#include <vector>

using namespace std;

int main() {
    // 创建整型向量容器
   vector<int> numbers;

    // 向容器添加数据
    numbers.push_back(1);  // 末尾插入元素10
    numbers.push_back(2);  // 末尾插入元素20
    numbers.push_back(3);  // 末尾插入元素30

    // 显示当前容器内容
    cout << "当前容器元素:";
    for (int i = 0; i < numbers.size(); ++i) {
        cout << numbers[i] << " ";
    }
    cout << endl;

    // 继续追加元素
    numbers.push_back(4);  // 末尾插入元素40
    numbers.push_back(5);  // 末尾插入元素50

    // 展示更新后的元素集合
    std::cout << "新增元素后容器内容:";
    for (int i = 0; i < numbers.size(); ++i) {
        cout << numbers[i] << " ";
    }
    cout << endl;

    // 获取首元素
    cout << "容器首元素为:" << numbers[0] << endl;

    // 清空容器数据
    numbers.clear();

    // 验证容器状态
    if (numbers.empty()) {
        cout << "当前容器已清空" << endl;
    }

    return 0;
}
2、push_back()、pop_back()、capacity()
cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec;    // 创建整型向量容器

    // 向容器添加元素
    vec.push_back(1);  
    vec.push_back(1);  
    vec.push_back(2);  
    vec.push_back(8);

    // 显示容器元信息
    cout << "当前元素数量:" << vec.size() << endl;
    cout << "当前存储容量:" << vec.capacity() << endl;

    // 移除最后一个元素
    vec.pop_back();
    cout << "删除末尾元素后,数量:" << vec.size() << endl;

    return 0;
}
3、reserve()
cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec;          // 创建整型向量容器
    vec.reserve(10);          // 预分配容量空间,避免多次内存分配

    for (int i = 0; i < 10; ++i) {
        vec.push_back(i);     // 添加元素到容器末尾
        cout << "添加元素后的容量:" << i << ",当前容量:" << vec.capacity() << endl;
    }

    return 0;
}
相关推荐
蓝澈11215 分钟前
弗洛伊德(Floyd)算法-各个顶点之间的最短路径问题
java·数据结构·动态规划
zl_dfq8 分钟前
数据结构 之 【堆】(堆的概念及结构、大根堆的实现、向上调整法、向下调整法)(C语言实现)
数据结构
127_127_12710 分钟前
2025 FJCPC 复建 VP
数据结构·图论·模拟·ad-hoc·分治·转化
闪电麦坤9514 分钟前
数据结构:二维数组(2D Arrays)
数据结构·算法
mrbone1118 分钟前
Git-git worktree的使用
开发语言·c++·git·cmake·worktree·gitab
浪裡遊29 分钟前
Sass详解:功能特性、常用方法与最佳实践
开发语言·前端·javascript·css·vue.js·rust·sass
真实的菜36 分钟前
JVM类加载系统详解:深入理解Java类的生命周期
java·开发语言·jvm
代码讲故事1 小时前
多种方法实现golang中实现对http的响应内容生成图片
开发语言·chrome·http·golang·图片·快照·截图
虾球xz2 小时前
CppCon 2018 学习:EFFECTIVE REPLACEMENT OF DYNAMIC POLYMORPHISM WITH std::variant
开发语言·c++·学习
Allen_LVyingbo2 小时前
Python常用医疗AI库以及案例解析(2025年版、上)
开发语言·人工智能·python·学习·健康医疗