【C++】容器:vector的接口介绍大全

vector的接口介绍大全

  • 一、vector的接口介绍
  • 二、常用接口的使用
      • 1. 定义vector
      • 2. vector赋值操作
      • 3. 迭代器
      • 4. 容量操作
        • resize
        • reserve
      • 5. 访问元素
        • [] front back at
      • 6. 修改容器
        • assign
        • push_back pop_back
        • insert
        • erase
        • clear
      • 7. 容器的其他操作
        • swap

vector 是 C++ 标准模板库(STL)中最常用的动态数组容器之一,提供了一组丰富的接口来方便地管理元素集合。以下是 vector 类模板的主要接口:

一、vector的接口介绍

  1. 构造函数:

    • vector():创建一个空的 vector。
    • vector(size_type count, const T& value):创建包含 count 个值为 value 的元素的 vector。
    • vector(const vector& other):复制另一个 vector。
    • vector(initializer_list<T> init):使用初始化列表创建 vector。
    • vector(iterator first, iterator last):创建一个 vector,其元素由范围 [first, last) 内的元素初始化。
  2. 赋值操作符:

    • operator=:将一个 vector 赋值给另一个 vector。
    • assign(InputIt first, InputIt last):用范围 [first, last) 内的元素替换当前 vector 的内容。
    • assign(size_type count, const T& value):用 count 个值为 value 的元素替换当前 vector 的内容。
  3. 迭代器:

    • begin():返回指向第一个元素的迭代器。
    • end():返回指向最后一个元素后面的位置的迭代器。
    • rbegin():返回指向最后一个元素的迭代器。
    • rend():返回指向第一个元素前面的位置的迭代器。
    • cbegin():返回指向第一个元素的 const 迭代器。
    • cend():返回指向最后一个元素后面的位置的 const 迭代器。
  4. 容量:

    • size():返回 vector 中的元素数量。
    • max_size():返回 vector 可以容纳的最大元素数量。
    • capacity():返回 vector 当前分配的存储容量。
    • empty():如果 vector 为空,则返回 true,否则返回 false。
    • reserve(size_type new_cap):请求 vector 容器的存储空间至少足够容纳 new_cap 个元素。
    • shrink_to_fit():将 vector 的 capacity 缩小为与其 size 相等。
  5. 访问元素:

    • operator[]:访问指定位置的元素。
    • at(size_type pos):访问指定位置的元素,并进行范围检查。
    • front():返回第一个元素的引用。
    • back():返回最后一个元素的引用。
    • data():返回指向底层数据的指针。
  6. 修改容器:

    • push_back(const T& value):将元素添加到 vector 的末尾。
    • pop_back():移除 vector 的最后一个元素。
    • emplace_back(Args&&... args):在 vector 的末尾就地构造一个元素。
    • insert(iterator pos, const T& value):在指定位置插入元素。
    • erase(iterator pos):移除指定位置的元素。
    • clear():移除所有元素。
  7. 修改操作:

    • resize(size_type count):改变 vector 的大小。
    • resize(size_type count, const T& value):改变 vector 的大小,并用 value 值初始化新的元素。
    • swap(vector& other):交换两个 vector 的内容。
  8. 搜索:

    • find(const T& value):在 vector 中查找值为 value 的第一个元素。
    • find_if(UnaryPredicate p):在 vector 中查找满足条件 p 的第一个元素。
    • count(const T& value):返回值为 value 的元素的数量。
  9. 排序:

    • sort():对 vector 中的元素进行排序。
    • reverse():颠倒 vector 中元素的顺序。

二、常用接口的使用

1. 定义vector

在C++中,vector是一个模板类,用于存储一组动态大小的元素。它位于 <vector> 头文件中,可以通过模板参数来指定存储的元素类型。

#include <vector>
using namespace std;vector<int> v_int; // 定义一个存储整数的vector
vector<double> vdouble; // 定义一个存储双精度浮点数的vector
vector<int> v1(10); //定义了10个整型元素的vector(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
vector<int> v2(10,0); //定义了10个整型元素的vector,且给出每个元素的初值为0
vector<int> v3(a); //用数组来创建vector,整体复制性赋值
vector<int> v4(a.begin(),a.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
int a[5]={1,2,3,4,5};
vector<int> v5(a,a+7); //从数组中获得初值
vector<int> v6 = {1, 2, 3}; // 使用初始化列表创建 vector

2. vector赋值操作

#include <iostream>
#include <vector>int main() {vector<int> vec1 = {1, 2, 3};vector<int> vec2 = {4, 5, 6};//operator=: 将一个 vector 赋值给另一个 vector。vec2 = vec1; // 将 vec1 赋值给 vec2vector<int> newVec;//assign(): 用范围 [first, last) 内的元素替换当前 vector 的内容。newVec.assign(vec.begin(), vec.end()); // 用 vec 的内容替换 newVec 的内容//assign(size_type count, const T& value): 用 count 个值为 value 的元素替换当前 vector 的内容。vec.assign(5, 10); // 使用 5 个值为 10 的元素替换 vec 的内容return 0;
}

3. 迭代器

#include <iostream>
#include <vector>int main() {vector<int> vec = {1, 2, 3, 4, 5};// 使用迭代器遍历 vectorfor (auto it = vec.begin(); it != vec.end(); ++it) {cout << *it << " ";}cout << std::endl;return 0;
}

4. 容量操作

resize
    vector<int> vec = {1, 2, 3, 4, 5};cout << "Size before resize: " << vec.size() << endl;// resize 前的sizevec.resize(8);// resize 后的sizecout << "Size after resize: " << vec.size() << ndl;for (int num : vec) {cout << num << " ";}cout << endl;
reserve
	//改变 vector 的大小为 count,多余的元素被删除或者用默认值填充。vec.resize(10, 10);for (int num : vec) {cout << num << " ";}//将 vector 的容量调整为至少为 new_capvec.reserve(10);cout << endl;

5. 访问元素

[] front back at
    vector<int> vec = {1, 2, 3};vec[0]		// 第一个元素vec.at(1)	// 第二个元素vec.front() // 返回第一个元素的引用。vec.back()	// 返回最后一个元素的引用。

6. 修改容器

assign
#include <iostream>
#include <vector>vector<int> vec;vec.assign({1, 2, 3, 4, 5});	//使用assign修改for (int num : vec) {cout << num << " ";}cout << endl;
push_back pop_back
    vector<int> vec = {1, 2, 3};vec.push_back(4);		// 在末尾插入元素for (int num : vec) {cout << num << " ";}cout << endl;vec.pop_back();			// 删除末尾元素for (int num : vec) {cout << num << " ";}cout << endl;
insert
	vector<int> vec = {1, 2, 3};//在 pos 位置之前插入一个元素,返回指向插入元素的迭代器。auto it = vec.insert(vec.begin() + 1, 5);//在 pos 位置之前插入 count 个值为 value 的元素。vec.insert(it, 3, 6);	// 在 pos 位置之前插入迭代器范围内的元素。vec.insert(vec.end(), {7, 8, 9});	for (int num : vec) {cout << num << " ";}cout << endl;
erase
	vector<int> vec = {1, 2, 3, 4, 5};// 删除 pos 位置处的元素。vec.erase(vec.begin() + 2);// 删除指定范围内的元素。vec.erase(vec.begin() + 1, vec.begin() + 3);for (int num : vec) {cout << num << " ";}cout << endl;
clear
	vector<int> vec = {1, 2, 3};//删除 vector 的所有元素。vec.clear();cout << "Size after clear: " << vec.size() << endl;

7. 容器的其他操作

swap
	vector<int> vec1 = {1, 2, 3};vector<int> vec2 = {4, 5, 6};//交换当前 vector 和参数 vector 的内容。vec1.swap(vec2);for (int num : vec1) {cout << num << " ";}cout << endl;for (int num : vec2) {cout << num << " ";}cout << endl;

※ 如果文章对你有帮助的话,可以点赞收藏!!谢谢支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B2134 质数的和与积

题目描述: 两个质数的和是 S&#xff0c;它们的积最大是多少&#xff1f; 代码: package lanqiao;import java.math.BigInteger; import java.util.*;public class Main {public static int[] prime new int[10000];public static void main(String[] args) {Scanner sc n…

淘宝商家号码采集软件教程步骤

淘宝商家号码采集工具的原理可以通过以下几个步骤来解释&#xff1a; 搜索关键词&#xff1a;工具首先通过用户输入的关键词&#xff0c;在淘宝平台上进行搜索。关键词可以是商品类别、商家名称等。 解析网页&#xff1a;工具通过网络请求获取淘宝搜索结果页面的源码&#xff…

vue3+ts实现表格单元格编辑功能

使用 el-table-plus 中的 el-switch 组件来控制表格的可编辑状态&#xff0c;并且使用 el-table-plus 组件显示表格。通过 :edit-table 属性来控制表格是否可编辑&#xff0c;而 :edit-config 属性用来配置编辑时的样式和允许编辑的列。当 switch 组件的状态发生改变时&#xf…

Python 学习笔记(十)—— 文件

目录 一、文件基本概念 二、文件打开和关闭 2.1 打开文件 open() 方法 2.2 File 对象的属性 2.3 关闭文件 close() 方法 三、文件操作 3.1 写入操作方法 3.1.1 write() 方法 3.3.2 writelines() 方法 3.2 读取操作方法 3.2.1 read() 方法 3.2.2 readline() 方法 3…

Docker Mysql 5.7搭建主从复制 CentOS7

文章目录 一、 环境介绍&#xff1a;二、 搭建步骤&#xff1a;1、容器启动2、master配置3、slave配置4、主从配置1、master配置2、slave配置 一、 环境介绍&#xff1a; 系统&#xff1a; CentOS7 mysql&#xff1a;5.7 docker&#xff1a;25.0.0.0 二、 搭建步骤&#xff1…

flex上下固定中间占固定高度(中间左右菜单)且内容自动滚动

效果图 布局&#xff1a; <view class"pop_tSet"><view class"pop_Con"><view class"box_bb"><view class"bb_title">{{titleObj[popType]}}</view></view><view class"box_bb_bot"…

程序安装 - 笔记

1 程序IOServer,依赖自己开发libs7.so.如何安装程序 要安装依赖于自己开发的 libs7.so 的程序 IOServer,你需要执行以下步骤: 编译 IOServer 程序:确保 IOServer 程序的源代码处于可用状态,并且已经编译成可执行文件。这可能需要执行诸如 make 或者其他编译命令,具体取决…

The Sandbox 推出全新后室模板!

我们非常高兴地向你介绍游戏制作器的另一个新成员&#xff1a; 后室模板&#xff01; 步入神秘而不自然的空旷空间&#xff0c;感觉有些......不对劲。准备好探索、创造和拥抱引人入胜的后室世界吧。 什么是后室&#xff08;Backroom&#xff09;游戏&#xff1f; 早在 2019 年…

ChatGPT之道:巧用写作技巧

ChatGPT无限次数:点击直达 ChatGPT之道&#xff1a;巧用写作技巧 在当今快节奏的社会中&#xff0c;写作是一项非常重要的技能&#xff0c;不仅可以帮助我们有效表达思想&#xff0c;还可以提升个人能力和吸引力。而借助人工智能技术&#xff0c;如OpenAI推出的ChatGPT&#x…

获取公募基金持仓【数据分析系列博文】

摘要 从指定网址获取公募基金持仓数据&#xff0c;快速解析并存储数据。 &#xff08;该博文针对自由学习者获取数据&#xff1b;而在投顾、基金、证券等公司&#xff0c;通常有Wind、聚源、通联等厂商采购的数据&#xff09; 1. 导入必要的库&#xff1a; pandas 用于数据处理…

本地存储、自定义事件、全局事件总线

Vue 1.1 浏览器的本地存储 存储内容大小一般支持5MB左右&#xff08;不同浏览器可能还不一样&#xff09; 浏览器通过 Window.sessionStorage 和 Window.localStorage 属性来实现本地存储机制 相关API: &#xff08;1&#xff09;xxxxStorage.setItem(key, value); 该方法接受一…

Java中类装载的执行过程

类装载的执行过程 类从加载到虚拟机中开始&#xff0c;直到卸载为止&#xff0c;它的整个生命周期包括了&#xff1a;加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中&#xff0c;验证、准备和解析这三个部分统称为连接&#xff08;linking&#xff09;。 1.加载 …

第一天学C++(C++入门)

一、HelloWorld &#xff08;第一个C入门程序&#xff09; 1.1代码 #include<iostream> using namespace std; // 1.单行注释// 2. 多行注释 /* main 是一个程序的入口 每个程序都必须有这么一个函数 有且仅有一个 */ int main() {// 第九行代码的含义就是在屏幕中输出…

果园系统养殖游戏喂养偷菜种植浇水养成小程序

装扮 通过购买装扮场景切换不同的农场风格 土地升级 通过特定的材料对土地和房屋进行升级 日志 记录道具的使用数量及金币农作物的收入情况 幸运转盘 可用金币进行抽奖 宝箱开启 获得宝箱后可以通过金币开启 每日签到 每日签到获得奖励 系统公告 可以第一时间知道游戏的更新和…

【安全】查杀linux挖矿病毒 kswapd0

中毒现象 高cpu占用&#xff0c;使用top命令查看cpu使用率长时间50%以上&#xff0c;cpu占用异常的进程八成就是挖矿病毒进程 此病毒隐藏了自己&#xff0c;top命令无法查看到挖矿病毒进程&#xff0c;可通过sysdig命令找到隐藏进程 安装sysdig curl -s https://s3.amazonaw…

2024年软件开发行业的薪资水平在下滑的原因?

下降的原因主要包括&#xff1a; 科技行业竞争加剧&#xff1a;随着科技行业竞争的加剧&#xff0c;企业为了压缩成本&#xff0c;开始降低程序员的薪资水平。 人才供应过剩&#xff1a;在计算机成为热门学科的同时&#xff0c;社会上出现了对IT业泡沫和虚假繁荣的质疑。大量…

go实现执行协成执行多个任务

大家对go语言陌生吗&#xff1f;大家有没有了解过关于go的协成呢&#xff0c;这里没有废话&#xff0c;直接上 使用go get 可以设置这个变量go env -w GOPROXYhttps://goproxy.io,direct 会使go get 更加快 package test_2import ("fmt""testing" )func w…

汉译英早操练-(十三)

hello大家好&#xff0c;这里是总想让你开心的hyssop。今天我们学点儿英语&#xff0c;填充下内心的空虚哈哈~ 不知道你拿起来一句话翻译的思路是什么&#xff0c;是应该用主动语态直抒胸臆&#xff0c;还是用被动语态强调部分&#xff1f;今天我们就来看看翻译大师李长栓老师对…

Redis数据库持久化方案

Redis数据库的持久化方案 Redis提供了两种主要的持久化方案&#xff0c;分别是RDB&#xff08;Redis DataBase&#xff09;和AOF&#xff08;Append Only File&#xff09;。 RDB&#xff08;Redis DataBase&#xff09; RDB是Redis默认的持久化方式&#xff0c;它按照一定的…

vue-textarea光标位置插入指定元素

vue-textarea光标位置插入指定元素 需求 点击插入关键字的时候把内容插入到光标所在的位置 效果图 实现 html <div class"temlate-container"><div class"template-content"><el-inputref"modelContent"v-model"mould.m…