首页 > 编程语言 >C++vector的常用接口及其介绍

C++vector的常用接口及其介绍

时间:2025-01-03 15:04:22浏览次数:3  
标签:std cout val 元素 接口 vector C++ type

在 C++ 中,vector 是一个非常常用的动态数组容器,它定义在 <vector> 头文件中。以下是 vector 的一些常用接口及其介绍:

构造函数

  • vector():默认构造函数,创建一个空的 vector
std::vector<int> v;

  • vector(size_type n, const value_type& val = value_type()):创建一个包含 n 个元素的 vector,每个元素都初始化为 val
std::vector<int> v(5, 10); // 包含5个值为10的元素

  • vector(const vector& other):复制构造函数,创建一个与 other 相同的 vector
std::vector<int> v1(3, 1);
std::vector<int> v2(v1); // v2 是 v1 的副本

  • vector(InputIt first, InputIt last):使用迭代器范围 [first, last) 内的元素初始化 vector
int arr[] = {1, 2, 3};
std::vector<int> v(arr, arr + 3); // 使用数组元素初始化 vector

容量相关

  • size():返回 vector 中元素的个数。
std::vector<int> v = {1, 2, 3};
std::cout << v.size() << std::endl; // 输出 3

  • capacity():返回当前分配的内存中可以容纳的元素个数。
std::vector<int> v;
v.reserve(10);
std::cout << v.capacity() << std::endl; // 输出 10

  • empty():判断 vector 是否为空。
std::vector<int> v;
if (v.empty()) {
    std::cout << "vector is empty" << std::endl;
}

  • reserve(size_type n):请求改变容量大小,以至少容纳 n 个元素。
std::vector<int> v;
v.reserve(10); // 预分配能容纳10个元素的空间

  • resize(size_type n, value_type val = value_type()):改变 vector 的大小为 n。如果 n 小于当前大小,会删除多余的元素;如果 n 大于当前大小,会在末尾添加值为 val 的元素。
std::vector<int> v = {1, 2, 3};
v.resize(5, 0); // v 变为 {1, 2, 3, 0, 0}

元素访问

  • operator[](size_type n):返回索引为 n 的元素的引用,不进行边界检查。
std::vector<int> v = {1, 2, 3};
std::cout << v[1] << std::endl; // 输出 2

  • at(size_type n):返回索引为 n 的元素的引用,进行边界检查,如果 n 超出范围会抛出 std::out_of_range 异常。
std::vector<int> v = {1, 2, 3};
try {
    std::cout << v.at(1) << std::endl; // 输出 2
    std::cout << v.at(10) << std::endl; // 抛出 std::out_of_range 异常
} catch (const std::out_of_range& e) {
    std::cerr << e.what() << std::endl;
}

  • front():返回第一个元素的引用。
std::vector<int> v = {1, 2, 3};
std::cout << v.front() << std::endl; // 输出 1

  • back():返回最后一个元素的引用。
std::vector<int> v = {1, 2, 3};
std::cout << v.back() << std::endl; // 输出 3

修改操作

  • push_back(const value_type& val):在 vector 的末尾添加一个元素。
std::vector<int> v = {1, 2, 3};
v.push_back(4); // v 变为 {1, 2, 3, 4}

  • pop_back():删除 vector 末尾的元素。
std::vector<int> v = {1, 2, 3, 4};
v.pop_back(); // v 变为 {1, 2, 3}

  • insert(iterator pos, const value_type& val):在指定位置 pos 插入一个元素 val
std::vector<int> v = {1, 2, 4};
v.insert(v.begin() + 2, 3); // v 变为 {1, 2, 3, 4}

  • erase(iterator pos):删除指定位置 pos 的元素。
std::vector<int> v = {1, 2, 3, 4};
v.erase(v.begin() + 2); // v 变为 {1, 2, 4}

  • erase(iterator first, iterator last):删除迭代器范围 [first, last) 内的元素。
std::vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 1, v.begin() + 3); // v 变为 {1, 4, 5}

  • clear():删除 vector 中的所有元素,将大小变为 0,但容量不变。
std::vector<int> v = {1, 2, 3};
v.clear();
std::cout << v.size() << std::endl; // 输出 0

其他

  • swap(vector& other):交换当前 vector 与 other 的内容。
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {4, 5, 6};
v1.swap(v2);

 

标签:std,cout,val,元素,接口,vector,C++,type
From: https://blog.csdn.net/Visual_progress/article/details/144909717

相关文章

  • 利用JAVA爬虫获取item_search_img-按图搜索1688商品(拍立淘)接口
    引言在当今的电商领域,图像识别技术的应用越来越广泛,尤其是以图搜图功能,它极大地提高了用户的购物体验。本文将详细介绍如何利用JAVA爬虫技术获取1688商品的按图搜索接口,即拍立淘接口,实现商品的图像识别搜索。一、1688API接口概述1688作为阿里巴巴集团旗下的批发交易平台,提......
  • c++之左值引用 右值引用 万能引用
    详细大家无论是在阅读代码,还是阅读文档的时候经常看到这几个词或者对应的符号,但是可能也不是很清楚他们到底有哪些区别,本文将对这几个概念详细深入的介绍。左值引用左值引用的表现形式,如下所示:intx=2;int&a=x; //正确,这里a就是一个左值引用int&a=2;//错误,临......
  • C++之模板进阶
    文章目录1.引言2.非类型模板参数2.1概念及使用2.2与#define定义宏的对比3.模板的特化3.1概念3.2函数模板特化3.3类模板特化3.3.1全特化3.3.2偏特化(也称半特化)3.3.3类模板特化应用示例4.模板的分离编译(了解)4.1什么是分离编译4.2模板的分离编译5.模......
  • 【新兴产业】脑机接口
    产业链上游主要为脑电采集软硬件厂商,包括用于监测和处理大脑信号的芯片、传感器等,因行业处研发投入阶段,类脑器官等科研工具也值得关注,构成了技术创新和突破的核心支撑;中游主要是脑机接口产品与服务提供商,包括脑机接口设备制造商、针对特定场景应用的产品、解决方案、脑电采集及......
  • Effective C++读书笔记——item2(const,enum,inlines取代#define)
    关于用常量取代#define的总体原则在编程中,应尽量减少预处理器(特别是#define)的使用,可通过合适的替代方式来避免#define带来的诸多问题,虽然不能完全消除预处理器相关指令(如#include、#ifdef/#ifndef仍有重要作用),但要让其使用频率降低。简单常量方面问题阐述:使用#defi......
  • 强化学习:手动实现一个并行环境采样的代码 —— SynVectorEnv
    代码实现的开源地址:https://openi.pcl.ac.cn/devilmaycry812839668/SyncVectorEnv这个代码的实现就是对强化学习(on-line)进行并行采样的一种实现的扩展,相关类似的实现在gym中也有,可以参考:https://gymnasium.farama.org/introduction/speed_up_env/https://gymnasium.faram......
  • 【前端开发】前端接口防止重复请求实现方案
    #薅羊毛前言前段时间老板心血来潮,要我们前端组对整个的项目都做一下接口防止重复请求的处理(似乎是有用户通过一些快速点击薅到了一些优惠券啥的)。。。听到这个需求,第一反应就是,防止薅羊毛最保险的方案不还是在服务端加限制吗?前端加限制能够拦截的毕竟有限。可老板就是执意要前端......
  • leetcode热题100(84. 柱状图中最大的矩形)c++
    链接:84.柱状图中最大的矩形-力扣(LeetCode)给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例1:输入:heights=[2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为10示......
  • 解决微信二维码接口接口返回:errcode\":47001,\"errmsg\":\"data format error rid
    dataformaterrorrid问题:在php中使用curl调用微信二维码生成接口getwxacodeunlimit时得到错误响应信息:errcode\":47001,\"errmsg\":\"dataformaterrorrid:xxx在微信开发者社区看了几个帖子全是在胡说,还有width参数不能小于280这种,真是笑死。。。解决:最终确定原因是接......
  • C++基础之移动语义(Move Semantic)
    文章目录引言Move语义的定义与优点示例:拷贝和移动操作应用场景Move后的变量自定义类中如何支持MoveMove语义的误区`std::move`并不移动数据移动后继续使用对象对整型或者布尔类型无效总结参考链接引言在现代C++中,Move语义通过优化资源管理和减少内存......