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

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;
}


http://www.kler.cn/a/596607.html

相关文章:

  • xss跨站之原理分类及攻击手法
  • 初级:数组与字符串面试题深度剖析
  • 分布式账本技术在 Web3 数据保护中的应用与实践
  • 基于deepseek的智能语音客服【第四讲】封装milvus数据库连接池封装
  • HC-05与HC-06蓝牙配对零基础教程 以及openmv识别及远程传输项目的概述
  • 常考计算机操作系统面试习题(三下)
  • FFmpeg + ‌Qt‌ 简单视频播放器代码
  • 通过SSH隧道与跳板机实现本地端口映射访问服务器文件
  • 【Qt】常用控件
  • SQL注入(SQL Injection)攻击原理与防御措施
  • (c语言)网络编程之UDP认识与并发服务器实现
  • 40岁重启人生学Python,用煎饼摊理解函数,用快递盒认识变量
  • python3使用lxml解析xml时踩坑记录
  • SOFABoot-08-启动加速
  • thymelef
  • 《Python实战进阶》第43集:使用 asyncio 实现异步编程
  • windows下利用Ollama + AnythingLLM + DeepSeek 本地部署私有智能问答知识库
  • Unity/C# 常用XML读写方式详解(LINQ to XML、XmlReader/Writer)
  • ES集群的部署
  • Pytest的夹具