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

C++STL-vector的使用

vector的定义方式

方式1:构造某一个类型的空容器

vector<int> v1;//构造一个int类型的空容器

方式2:构造一个含有n个val的某类型容器

vector<int> v2(10, 2);//构造一个含有10个2的int类型的容器

方式3:拷贝构造某类型容器

vector<int> v3(v2);//v2容器的复制品

方式4:使用迭代器拷贝构造一段内容

vector<int> v4(v2.begin(), v2.end());//使用迭代器拷贝构造v2的一段内容

还可以拷贝其他容器

string s("hello");
vector<char> v5(s.begin(), s.end());

vector的空间问题

size和capacity

size获取容器中有效元素的个数,capacity获取容器最大容量 

#include<vector>
#include<iostream>
using namespace std;int main()
{vector<int> v(10, 2);cout << v.size() << endl;//10cout << v.capacity() << endl;//10return 0;
}

 reserve和resize

reserve改变容量,resize改变元素个数

reserve规则:
1.所给值大于capacity时,capacity变成该值

2.所给值小于capacity时,什么也不做

resize规则:

1.所给值大于size时,size扩大到该值,扩大的元素默认为0

2..所给值小于size时,size缩小到该值


int main()
{vector<int> v(10, 2);cout << v.size() << endl;//10cout << v.capacity() << endl;//10v.reserve(20);//改变容器的capacity为20cout << v.size() << endl;//10cout << v.capacity() << endl;//20v.resize(15);cout << v.size() << endl;//15cout << v.capacity() << endl;//20return 0;
}

empty 

判断当前容器是否为空

int main()
{vector<int> v1;vector<int> v2(10,2);cout << v1.empty() << endl;//1表示空cout << v2.empty() << endl;//0表示非空return 0;
}

vector的迭代器使用

begin和end

begin函数得到第一个元素的位置,end函数得到最后一个元素的后一个位置

正向迭代器遍历容器

int main()
{vector<int> v(10, 2);vector<int>::iterator it = v.begin();while (it != v.end()){cout << *it << " ";it++;}cout << endl;return 0;
}

rbegin和rend

rbegin获取最后一个元素的位置,rend获取容器第一个元素前一个的位置

反向迭代器遍历容器

int main()
{vector<int> v(10, 2);vector<int>::reverse_iterator rit = v.rbegin();while (rit != v.rend()){cout << *rit << " ";rit++;}cout << endl;return 0;
}

vector的增删查改

push_back(尾插)和pop_back(尾删)

int main()
{vector<int> v;v.push_back(1);v.push_back(2);v.pop_back();v.pop_back();return 0;
}

insert和erase

insert函数可以在所给位置插入一个或多个元素,erase可以删除所在位置的元素,也可以删除区间内的所有元素(左闭右开)

int main()
{vector<int> v;v.push_back(1);v.push_back(2);v.insert(v.begin(), 0);//容器开头插个0v.insert(v.begin(), 5, 1);//容器开头插5个1v.erase(v.begin());//删除容器开头位置元素v.erase(v.begin(), v.begin()+1);//左闭右开的删cout << v.size();//6return 0;
}

find

在某一特定值位置进行修改要用到find

1.find函数有三个参数,前两个参数确定一个区间(左闭右开),第三个参数确定所选值

2.在区间找到匹配的元素返回它的迭代器,没找到则返回第二个参数

int main()
{vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);vector<int>::iterator pos = find(v.begin(), v.end(), 2);//获取值为2元素的迭代器v.insert(pos,10);//在2的位置插入10pos = find(v.begin(), v.end(), 3);//获取值为3元素的迭代器v.erase(pos);//删除3return 0;
}

swap

int main()
{vector<int> v1(10, 1);vector<int> v2(10, 2);v1.swap(v2);return 0;
}

元素访问 

vector中对[ ]进行了重载,"下标+[ ]"进行元素访问

int main()
{vector<int> v(10, 1);//使用下标的方式便利容器for (size_t i = 0; i < v.size(); i++){cout << v[i] << " ";}cout << endl;return 0;
}

范围for对vector容器进行遍历(支持迭代器就会支持范围for)

int main()
{vector<int> v(10, 1);for (auto e : v){cout << e << " ";}cout << endl;return 0;
}

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

相关文章:

  • 非隔离电源方案
  • 【信息系统项目管理师-选择真题】2025上半年(第一批)综合知识答案和详解
  • 【Python训练营打卡】day44 @浙大疏锦行
  • 【PhysUnits】15.15 变量类型(variable.rs)
  • 前端没有“秦始皇“,但可以做跨端的王[特殊字符]
  • 驭码CodeRider 2.0 产品体验 — 搭建邮件服务
  • Web前端之原生表格动态复杂合并行、Vue
  • 农田水利如何「聪明」起来?Modbus转Ethernet IP破解设备互联
  • C语言| 指针在数组中的移动
  • qt ui 转python
  • 三维GIS开发cesium智慧地铁教程(3)entity实体
  • 岩石三轴试验机
  • Spring Boot-面试题(52)
  • 每日算法刷题Day23 6.5:leetcode二分答案3道题,用时1h40min(有点慢)
  • JS深入学习 — 循环、函数、数组、字符串、Date对象,Math对象
  • 前端面试四之Fetch API同步和异步
  • c++算法学习3——深度优先搜索
  • 【java面试】框架篇
  • snprintf函数用法及注意事项详解
  • Redisson简明教程—你家的锁芯该换了
  • 71 LV信息查看
  • DeepSeek私有化部署的理性抉择:谁需要?谁不必?
  • SSH 和 Telnet 介绍、区别与使用方法
  • JAVA-springboot JUnit单元测试
  • Qt实现一个悬浮工具箱源码分享
  • LeetCode_LCR 509 斐波拉契
  • 经济学顶刊QJE:构建从非结构化文本数据中挖掘经济规律的新框架!
  • 【QT】qtdesigner中将控件提升为自定义控件后,css设置样式不生效(已解决,图文详情)
  • 实测报告:设备 AI 知识库如何帮助新手快速掌握巡检技巧?
  • 在嵌入式中C语言中static修饰的变量常量和字符串常量存储位置