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

vector的用法

我是学C语言的,本以为c++的vector只能创建数组,但现在才发现他还是太全面了。

他的功能:

在C++中,std::vector 是一个动态数组容器,提供高效的随机访问和动态扩容功能。

1. 头文件

#include <vector>
#include <iostream>
#include <algorithm> // 用于sort等算法
using namespace std;

2. 初始化与声明

// 空向量
vector<int> v1;// 指定大小(5个元素,默认值0)
vector<int> v2(5);// 指定大小和初始值(5个元素,值-1)
vector<int> v3(5, -1);// 列表初始化
vector<int> v4 = {1, 2, 3, 4, 5};// 从数组初始化
int arr[] = {10, 20, 30};
vector<int> v5(arr, arr + sizeof(arr)/sizeof(int));// 复制构造
vector<int> v6(v4);

3. 元素访问

vector<int> v = {10, 20, 30};// 下标访问(不检查边界)
int a = v[1];  // a=20// 安全访问(边界检查,越界抛异常)
int b = v.at(2); // b=30// 首尾元素
int front = v.front(); // 10
int back = v.back();   // 30// 数据指针(C风格交互)
int* p = v.data(); // 指向首元素

4. 容量操作

vector<int> v = {1, 2, 3};v.empty();    // 是否为空 → false
v.size();     // 元素数量 → 3
v.capacity(); // 实际分配内存大小(>= size)v.reserve(100); // 预分配100个元素内存
v.shrink_to_fit(); // 释放多余内存(C++11)

5. 修改操作

vector<int> v = {10, 20};// 尾部插入
v.push_back(30); // {10,20,30}// 删除尾部
v.pop_back();    // {10,20}// 指定位置插入(迭代器位置)
v.insert(v.begin() + 1, 15); // {10,15,20}// 删除元素(迭代器位置)
v.erase(v.begin()); // {15,20}// 清空向量
v.clear();// 重置大小(多删少补默认值)
v.resize(5); // {0,0,0,0,0}

6. 迭代器遍历

vector<int> v = {1, 3, 5};// 正向迭代器遍历
for (auto it = v.begin(); it != v.end(); ++it) {cout << *it << " ";
}// 反向迭代器遍历
for (auto rit = v.rbegin(); rit != v.rend(); ++rit) {cout << *rit << " ";
}// 范围for循环(C++11)
for (int num : v) {cout << num << " ";
}

7. 高级操作

// 交换两个向量
vector<int> v1 = {1, 2}, v2 = {3, 4};
v1.swap(v2); // v1={3,4}, v2={1,2}// 比较操作(按字典序)
if (v1 == v2) { /*...*/ }// 排序(需#include <algorithm>)
sort(v1.begin(), v1.end());// 逆序
reverse(v1.begin(), v1.end());

http://www.xdnf.cn/news/14090.html

相关文章:

  • Web网页端即时通讯源码/IM聊天源码RainbowChat-Web
  • 一阶拟线性偏微分方程光滑解的存在性与最大初始振幅分析
  • Rocky Linux 9 系统安装配置图解教程并做简单配置
  • Node.js下载安装及环境配置教程
  • IEEE-745标准4字节16进制转浮点
  • 【VUE3】基于Vue3和Element Plus的递归组件实现多级导航栏
  • 社会应用融智学的人力资源模式:潜能开发评估;认知基建资产
  • 【为什么InnoDB用B+树?从存储结构到索引设计深度解析】
  • 车载以太网-switch
  • 无人机噪音处理模块技术分析
  • 前端面试八之map
  • NGINX SSL/TLS 预读模块解密 ngx_stream_ssl_preread_module 实战指南
  • 编译器基础概念
  • libcuckoo 介绍和使用指南
  • Spring源码本地编译并执行测试
  • 安卓手机解压软件推荐:高效处理各种压缩文件
  • 问答播放器(视频弹题)使用例子(代码)
  • Linux拼接/etc/passwd和/etc/shadow下的用户列
  • ImageSharp.Web 使用指南:高效处理ASP.NET Core中的图像
  • 油猴攻略:解锁浏览器无限可能
  • Python基础之函数(1/3)
  • 在 Windows 11 上,必须开启网络代理才能上网,关闭代理后无法访问互联网
  • JVM GC 问题排查实战案例
  • SQL注入部分理论入门学习
  • 列举开源的模型和推理框架
  • CSS a标签内文本折行展示
  • NoETL 指标平台:语义驱动数据治理的升维战
  • 网络原理:网段划分
  • 看PDF文献用什么软件比较好?高效文献阅读工具推荐
  • Elasticsearch 批量创建索引实践与优化建议