当前位置: 首页 > news >正文

3-22 vector的使用详解---STL C++

C++中的vector容器展开系统讲解,具体内容如下:

1. vector的定义和特性(基础概念)

  • 讲解vector作为动态数组的核心特性:自动内存管理、动态扩容机制(倍增策略)
  • 对比普通数组:支持随机访问、尾部操作高效(O(1))、中间插入低效(O(n))
  • 底层实现原理:连续内存空间、capacity与size的区别

2. vector的常用函数(核心API)

  • 基础操作:push_back()pop_back()size()empty()
  • 元素访问:operator[]at()front()back()的安全性对比
  • 容量管理:reserve()预分配内存、resize()调整大小
  • 迭代器使用:begin()/end()rbegin()/rend()

3. vector排序去重(算法应用)

  • 使用STL算法:sort(v.begin(), v.end())实现升序/降序排序
  • 结合eraseunique实现去重:v.erase(unique(v.begin(), v.end()), v.end())
  • 注意事项:必须「先排序后去重」的底层逻辑(unique只能处理相邻重复)
  • 自定义排序:通过lambda表达式实现复杂对象排序

4. 代码示例(综合实践)

  • 典型应用场景:动态数据收集、算法题中的高频使用
  • 完整示例可能包含:
    vector<int> v = {5,3,2,5,1};
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
    for(auto num : v) cout << num << " "; // 输出:1 2 3 5
    

练习

#include <bits/stdc++.h>
using namespace std;
int main() {
	
	cout<<"hello"<<'\n';
	
	vector<int> a;
	a.push_back(2);
//	a.push_back();
	a.push_back(2);
		a.push_back(222);
			a.push_back(2);
				a.push_back(2233);
					a.push_back(2);

cout<<"---------------\n";
	for(const auto& num:a)
	cout<<num<<'\n';
sort(a.begin(),a.end());

cout<<"---------排序后------\n";
	for(const auto& num:a)
	cout<<num<<'\n';	
	
	
	a.erase(unique(a.begin(),a.end()),a.end());
	
cout<<"---------去重后------\n";
	for(const auto& num:a)
	cout<<num<<'\n';	
	return 0;
	
}


练习2

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

int main() {
    vector<int> numbers = {1, 2, 3, 4, 5}; // 初始化示例数据

    // 【核心操作1】插入元素到索引2位置
    numbers.insert(numbers.begin() + 2, 10); 
    cout << "插入后的向量: ";
    for (const auto& num : numbers) {
        cout << num << " ";
    }
    cout << endl;

    // 【核心操作2】删除索引2的元素
    if (!numbers.empty()) {
        numbers.erase(numbers.begin() + 2); // 安全删除
    }
    cout << "删除后的向量: ";
    for (const auto& num : numbers) {
        cout << num << " ";
    }
    cout << endl;

    // 【核心操作3】获取向量大小
    cout << "向量大小: " << numbers.size() << endl;

    // 【核心操作4】清空向量
    numbers.clear(); // 或使用 swap(vector<int>().swap(numbers));
    cout << "清空后状态: ";
    if (numbers.empty()) {
        cout << "向量已为空" << endl;
    } else {
        for (const auto& num : numbers) {
            cout << num << " ";
        }
    }
    cout << endl;

    return 0;
}

相关文章:

  • 免费下载 | 2025年AI产业全景报告.pdf
  • 手机怎么换网络IP有什么用?操作指南与场景应用‌
  • 常考计算机操作系统面试习题(四)
  • 区块链在医疗数据共享中的应用:解锁安全与透明的新维度
  • 【C++进阶】函数:深度解析 C++ 函数的 12 大进化特性
  • Java 大视界 -- Java 大数据在智能体育赛事直播数据分析与观众互动优化中的应用(142)
  • Rust vs. Go: 在使用最快框架时的性能测试[译]
  • 基于随机森林回归预测葡萄酒质量
  • Colab——大规模数据集解压问题:Unzip解压不完整/时间过长/强制掉线
  • 树莓派5的供电与启动
  • 测试基础入门
  • Selenium Web UI自动化测试:从入门到实战
  • 操作系统之进程控制
  • Linux | 安装 Samba将ubuntu 的存储空间指定为windows 上的一个磁盘
  • sin、cos、tan、arcsin、arccos、arctan图像
  • Redis的单线程模型与多线程优化
  • QT开发(6)--信号和槽
  • C++::多态
  • 安全守护:反光衣检测技术的革新之路
  • 【MySQL】数据库和表的操作
  • 巴基斯坦与印度停火延长至18日
  • 通用汽车回应进口车业务调整传闻:因经济形势变化重组,致力于在中国持续发展
  • 被前男友泼汽油致残后,一个女孩经历的双重灼烧
  • KPL“王朝”诞生背后:AG和联赛一起迈向成熟
  • 北斗专访|特赞科技范凌:现在AI主要是“说话”,接下来要“干活”了
  • 王毅谈中拉论坛第四届部长级会议重要共识