数据结构 动态顺序表-vector

news/2025/2/13 14:15:16/

一、创建vector

#include <vector> // 头⽂件 
using namespace std;
const int N = 20;
struct node
{int a, b, c;
};
// 1. 创建 
void init()
{vector<int> a1; // 创建⼀个空的可变⻓数组 vector<int> a2(N); // 指定好了⼀个空间,⼤⼩为 N vector<int> a3(N, 10); // 创建⼀个⼤⼩为 N 的 vector,并且⾥⾯的所有元素都是 10 vector<int> a4 = {1, 2, 3, 4, 5}; // 使⽤列表初始化,创建⼀个 vector // <> ⾥⾯可以放任意的类型,这就是模板的作⽤,也是模板强⼤的地⽅ // 这样,vector ⾥⾯就可以放我们接触过的任意数据类型,甚⾄是 STL vector<string> a5; // 放字符串 vector<node> a6; // 放⼀个结构体 vector<vector<int>> a7; // 甚⾄可以放⼀个⾃⼰,当成⼀个⼆维数组来使⽤。并且每⼀维
都是可变的 vector<int> a8[N]; // 创建 N 个 vector 
}

二、size/empty

size :返回实际元素的个数;
2. empty :返回顺序表是否为空,因此是⼀个bool 类型的返回值。
a. 如果为空:返回true
b. 否则,返回false
时间复杂度:O(1) 。

// 2. size
void test_size()
{// 创建⼀个⼀维数组 vector<int> a1(6, 8);for(int i = 0; i < a1.size(); i++){cout << a1[i] << " ";}cout << endl << endl;// 创建⼀个⼆维数组 vector<vector<int>> a2(3, vector<int>(4, 5));for(int i = 0; i < a2.size(); i++){// 这⾥的 a2[i] 相当于⼀个 vector<int> a(4, 5) for(int j = 0; j < a2[i].size(); j++){cout << a2[i][j] << " ";}cout << endl;}cout << endl << endl;
}

三、begin/end

1. begin :返回起始位置的迭代器(左闭);
2. end :返回终点位置的下⼀个位置的迭代器(右开);
利⽤迭代器可以访问整个vector ,存在迭代器的容器就可以使⽤范围for 遍历。

// 3. begin/end
void test_it()
{vector<int> a(10, 1);// 迭代器的类型是 vector<int>::iterator,但是⼀般使⽤ auto 简化 for(auto it = a.begin(); it != a.end(); it++){cout << *it << " ";}cout << endl << endl;// 使⽤语法糖 - 范围 for 遍历 for(auto x : a){cout << x << " ";}cout << endl << endl;
}

四、push_back/pop_back

1. push_back :尾部添加⼀个元素
2. pop_back :尾部删除⼀个元素
当然还有insert 与erase 。不过由于时间复杂度过⾼,尽量不使⽤。
时间复杂度:O(1) 。

// 如果不加引⽤,会拷⻉⼀份,时间开销很⼤ 
void print(vector<int>& a)
{for(auto x : a){cout << x << " ";}cout << endl;
}
// 4. 添加和删除元素 
void test_io()
{vector<int> a;// 尾插 1 2 3 4 5 a.push_back(1);a.push_back(2);a.push_back(3);a.push_back(4);a.push_back(5);print(a);// 尾删 3 次 a.pop_back();a.pop_back();a.pop_back();print(a);
}

五、front/back

1. front :返回⾸元素;
2. back :返回尾元素;
时间复杂度:O(1) 。

// 5. ⾸元素和尾元素 
void test_fb()
{vector<int> a(5);for(int i = 0; i < 5; i++){a[i] = i + 1;}cout << a.front() << " " << a.back() << endl;
}

六、resize

• 修改vector 的⼤⼩。
• 如果⼤于原始的⼤⼩,多出来的位置会补上默认值,⼀般是0 。
• 如果⼩于原始的⼤⼩,相当于把后⾯的元素全部删掉。
时间复杂度:O(N) 。

// 如果不加引⽤,会拷⻉⼀份,时间开销很⼤ 
void print(vector<int>& a)
{for(auto x : a){cout << x << " ";}cout << endl;
}
// 6. resize
void test_resize()
{vector<int> a(5, 1);a.resize(10); // 扩⼤ print(a);a.resize(3); // 缩⼩ print(a);
}

七、clear

• 清空vector 
底层实现的时候,会遍历整个元素,⼀个⼀个删除,因此时间复杂度:O(N) 。

// 如果不加引⽤,会拷⻉⼀份,时间开销很⼤ 
void print(vector<int>& a)
{for(auto x : a){cout << x << " ";}cout << endl;
}
// 7. clear
void test_clear()
{vector<int> a(5, 1);print(a);a.clear();cout << a.size() << endl;print(a);
}


http://www.ppmy.cn/news/1571725.html

相关文章

硬件学习笔记--40 电磁兼容试验-4 快速瞬变脉冲群试验介绍

目录 电磁兼容试验-快速瞬变脉冲群试验介绍 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-快速瞬变脉冲群试验介绍 驻留时间是在规定频率下影响量施加的持续时间。被试设备&#xff08;EUT&#xff09;在经受扫频频带的电磁影响量或电磁干扰的情况下&#xff0c;在…

第三章:Matlab 绘图功能

第三章&#xff1a;Matlab 绘图功能 3.1 二维绘图 3.1.1 基本绘图函数 plot: 绘制二维曲线图。stem: 绘制离散数据图。 代码示例: % 使用 plot 绘制正弦曲线 x 0:0.1:2*pi; y sin(x); plot(x, y); title(正弦曲线); xlabel(x); ylabel(sin(x));% 使用 stem 绘制离散数据…

华为防火墙pppoe拨号接入互联网配置案例

目录 1.pppoe拨号背景2.网络拓扑3.网络需求4.网络配置4.1 网络基础配置4.2 pppoe配置4.2.1 pppoe服务端配置(现网环境可忽略)4.2.2 pppoe客户端配置4.2.3 结果验证 5.小结 1.pppoe拨号背景 PPPoE&#xff08;Point-to-Point Protocol Over Ethernet&#xff09;拨号产生的背景…

智慧出行与车路云一体化政策研究报告

智慧出行政策的发展趋势可以大致划分为三个阶段&#xff0c;与行业发展历程紧密相连。当前&#xff0c;智慧出行政策正逐步进入第三阶段&#xff0c;即技术融合与广泛应用阶段。这一阶段的政策发展趋势将更加注重智慧出行的全面融合和创新应用。比如智能网联技术在智慧出行层面…

【探寻C++之旅】第三章:类和对象(下)

请君浏览 前言1. 类的默认成员函数2. 构造函数3.析构函数4. 拷贝构造函数5. 赋值重载函数5.1 运算符重载5.2 赋值运算符重载 6. 取地址运算符重载7. 类型转换8. static成员9. 友元10. 内部类11. 匿名对象尾声 前言 今天&#xff0c;我们继续踏入追寻C的冒险历程。上一章我们简单…

深度求索(DeepSeek)的AI革命:NLP、CV与智能应用的技术跃迁

Deepseek官网&#xff1a;DeepSeek 引言&#xff1a;AI技术浪潮中的深度求索 近年来&#xff0c;人工智能技术以指数级速度重塑全球产业格局。在这场技术革命中&#xff0c;深度求索&#xff08;DeepSeek&#xff09;凭借其前沿的算法研究、高效的工程化能力以及对垂直场景的…

因果机器学习(CausalML)前沿创新思路

结合了传统因果推断与机器学习的因果机器学习是目前AI领域的前沿研究方向&#xff0c;其核心优势在于将因果逻辑融入数据驱动模型&#xff0c;从根本上解决了传统方法的缺陷。因此&#xff0c;它也是突破传统机器学习瓶颈的关键方向&#xff0c;不仅当下热度高&#xff0c;在未…

react项目引入tailwindcss不生效解决方案

根据tailwindcss官网的操作步骤下来&#xff0c;样式未生效&#xff0c;且未报错&#xff0c;看了挺多的资料&#xff0c;还是并未解决。 后面在另一个项目尝试时&#xff0c;报了下面的问题&#xff1a; Error: PostCSS plugin tailwindcss requires PostCSS 8 根据这个链接…