Vector里常用的操作(C++)

1 引言

编程时常用的Vector操作有创建、访问元素、增加元素、删除元素、修改元素、查找索引以及一些常用的函数操作,本文总结了一下这些方法在C++里面的实现方式(并不是唯一的)。

2 创建

操作类别注释C++
创建创建空向量vector<int>a;
创建向量常量std::vector<int> a = {1, 2, 3, 4, 5 };
创建长度为3,值为0的向量std::vector<int> a(3);
创建长度为3,值为1的向量std::vector<int> a;
a.assign(3, 1);

3 访问元素

操作类别注释C++
创建创建空向量vector<int>a;
创建向量常量std::vector<int> a = {1, 2, 3, 4, 5 };
创建长度为3,值为0的向量std::vector<int> a(3);
创建长度为3,值为1的向量std::vector<int> a;
a.assign(3, 1);
访问访问第i个元素v[i]
切片,第i到j个元素std::vector<int> vec;
vec.assign(v.begin() + i-1, v.begin() + j)//新生成v的子数组vec

 4 增加元素

操作类别注释C++
增加在起始位置增加一个元素a.insert(a.begin() + 0, 5);
在中间位置增加一个元素a.insert(a.begin() + i-1, 5);
在末尾位置增加一个元素a.push_back(5);
在起始位置增加一段元素a.insert(a.begin() + 0, b.begin(), b.end());
在中间位置增加一段元素a.insert(a.begin() + i-1, b.begin(), b.end());
在末尾位置增加一段元素a.insert(a.end(),b.begin(), b.end());

5 删除元素

操作类别注释C++
删除删除第一个元素a.erase(a.begin() , a.begin() + 1);
删除最后一个元素a.pop_back();
删除第i个元素a.erase(a.begin()+i-1, a.begin() + i);
删除开始位置长度固定的元素a.erase(a.begin() , a.begin()+length);
删除中间段(第i个位置)长度固定的元素a.erase(a.begin() + i - 1, a.begin() + i + length - 1);
删除末尾位置长度固定的元素a.erase(a.end() -length, a.end());
删除全部的元素a.clear();

 6 修改元素

操作类别注释C++
修改修改第一个元素a[0] = 100;
修改第i个元素a[i] = 200;
修改最后一个元素a.back() = 300;
修改第一段元素copy(b.begin(), b.end(), a.begin());
修改中间段元素copy(b.begin(), b.end(), a.begin()+i-1);
修改最后一段元素copy(b.begin(), b.end(), a.end() -b.size());

7 查找元素

操作类别注释C++
查找查找等于某个值的第一个索引for (int i = 0; i < a.size(); i++) {
  if (a[i] == target) {
   index = i;
   break;
  }
 }
查找等于某个值的最后一个索引 for (int i = 0; i < a.size(); i++) {
   if (a[i] == target) {
    index = i;
   }
 }
查找等于某个值的所有索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] == target) {
   all_index.push_back(i);
  }
 }
查找大于某个值的第一个索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] > target) {
   index = i;
   break;
  }
 }
查找大于某个值的最后一个索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] > target) {
   index = i;
  }
 }
查找大于某个值的所有索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] > target) {
   all_index.push_back(i);
  }
 }
查找小于某个值的第一个索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] < target) {
   index = i;
   break;
  }
 }
查找小于某个值的最后一个索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] < target) {
   index = i;
  }
 }
查找小于某个值的所有索引 for (int i = 0; i < a.size(); i++) {
  if (a[i] <= target) {
   all_index.push_back(i);
  }
 }

8 常用函数

操作类别注释C++
向量函数求和std::accumulate(v.begin(), v.end(), 0);//0是初始值
均值static_cast<double> std::accumulate(v.begin(), v.end(), 0)/v.size()
标准差double variance = 0;
for (int i : vec) {
    variance += pow(i - mean, 2);
}
double stdev = sqrt(variance / vec.size());
中值std::sort(vec.begin(), vec.end());
double median;
if (vec.size() % 2 == 0)
{ median = static_cast<double>(vec[vec.size() / 2 - 1] + vec[vec.size() / 2]) / 2; }
 else
{ median = vec[vec.size() / 2]; }
最大值auto max_element = std::max_element(vec.begin(), vec.end());//返回的是迭代器
int max_value = *max_element;//*就得到最大值
最大值索引int max_index = std::distance(vec.begin(), max_element);
最小值auto min_element = std::min_element(vec.begin(), vec.end());//返回的是迭代器
int min_value = *min_element;//*得到最小值
最小值索引int min_index = std::distance(vec.begin(), min_element);
排序std::sort(vec.begin(), vec.end())
等差数列int start = 1;
int diff = 1;
int length = 10;
std::vector<int> vec;
for (int i = 0; i < length; i++) {
    vec.push_back(start + i * diff);
}
反转reverse(v.begin(),v.end());

 9 代码示例

#pragma once
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{//创建vector<int> b = { 3,7,13,4,15,26,17 };//创建常量vector<int>a;//创建一个空数组cout << a.size() << endl;//长度为0a.assign(4, 2);//创建长度为4,值全为2的常量vector<int>c(10);//创建一个固定长度,值全为0的数组cout << c.size() << endl;//长度为10//增加a.insert(a.begin() + 0, 5);//在起始位置增加一个元素int i = 2;//元素的序号a.insert(a.begin() + i, 6);//在中间位置增加一个元素a.push_back(5);//在末尾位置增加一个元素a.insert(a.begin() + 0, b.begin(), b.end());//在起始位置增加一段元素a.insert(a.begin() + i, b.begin(), b.end());//在中间位置增加一段元素a.insert(a.end(),b.begin(), b.end());//在末尾位置增加一段元素//删除a.erase(a.begin() , a.begin() + 1);//删除第一个元素a.pop_back();//删除最后一个元素a.erase(a.begin()+i-1, a.begin() + i);//删除第i个元素cout <<a.size()<< endl;int length = 4;a.erase(a.begin() , a.begin()+length);//删除开始位置长度固定的元素a.erase(a.begin() + i - 1, a.begin() + i + length - 1);//删除中间段(第i个位置)长度固定的元素a.erase(a.end() -length, a.end());//删除末尾位置长度固定的元素a.clear();//删除全部的元素a.assign(10, 2);//创建长度为4,值全为2的常量//修改a[0] = 100;//修改第一个元素a[i] = 200;//修改第i个元素a.back() = 300;//修改最后一个元素for_each(a.begin(), a.end(), [](auto elem) { std::cout << elem << " "; });cout << endl;copy(b.begin(), b.end(), a.begin());//修改第一段元素copy(b.begin(), b.end(), a.begin()+i-1);//修改中间段元素copy(b.begin(), b.end(), a.end() -b.size());//修改最后一段元素//查找int target = 7;for_each(a.begin(), a.end(), [](auto elem) { std::cout << elem << " "; });cout << endl;//查找等于第一个索引int index;for (int i = 0; i < a.size(); i++) {if (a[i] == target) {index = i;break;}}//查找最后一个索引for (int i = 0; i < a.size(); i++) {if (a[i] == target) {index = i;}}vector<int> all_index;//查找所有for (int i = 0; i < a.size(); i++) {if (a[i] == target) {all_index.push_back(i);}}cout << "dayu" << endl;//查找大于值第一个索引for (int i = 0; i < a.size(); i++) {if (a[i] > target) {index = i;break;}}cout << index << endl;//查找大于某个值的最后一个索引for (int i = 0; i < a.size(); i++) {if (a[i] > target) {index = i;}}cout << index << endl;//查找大于某个值的所有索引all_index.clear();//清空for (int i = 0; i < a.size(); i++) {if (a[i] > target) {all_index.push_back(i);}}for_each(all_index.begin(), all_index.end(), [](auto elem) { std::cout << elem << " "; });cout << endl;cout <<"小于"<< endl;//查找小于值第一个索引for (int i = 0; i < a.size(); i++) {if (a[i] < target) {index = i;break;}}cout << index << endl;//查找小于某个值的最后一个索引for (int i = 0; i < a.size(); i++) {if (a[i] < target) {index = i;}}cout << index << endl;//查找小于某个值的所有索引all_index.clear();//清空for (int i = 0; i < a.size(); i++) {if (a[i] <= target) {all_index.push_back(i);}}for_each(all_index.begin(), all_index.end(), [](auto elem) { std::cout << elem << " "; });cout << endl;//其它一些操作vector<int>e;e.assign(a.begin(), a.begin() + 3);cout << a.empty()<<endl; //判断a是否为空,空则返回true,非空则返回falsesort(a.begin(), a.end());//从小到大排序reverse(a.begin(), a.end());//倒序for_each(a.begin(), a.end(), [](auto elem) { std::cout << elem << " "; });cout << endl;int test[5] = { 1,2,3,4,5 };cout << sizeof(test)/sizeof(int) << endl;return 0;
}

相关链接:

数组常用操作对照表——matlab和C++(vector)_c++ matlab vector-CSDN博客

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

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

相关文章

Arduino中增加修改ESP32烧录固件的速度

在Arduino中&#xff0c;默认对ESP32-S3芯片的烧录速度只支持115200、230400、460800、921600这几种速率。只能够在 工具->Upload Speed中选择这些。 有的时候烧录还是觉得太慢了。那么能否更快一些呢&#xff1f; 首先你的USB转串口芯片要支持高速的。常见的芯片速率支持…

Java | 选择排序算法实现

大家可以关注一下专栏&#xff0c;方便大家需要的时候直接查找&#xff0c;专栏将持续更新~ 题目描述 编写一个Java程序&#xff0c;实现选择排序算法。程序需要能够接收一个整型数组作为输入&#xff0c;并输出排序后的数组。 选择排序是一种简单直观的排序算法&#xf…

机械臂模型更换成自己的urdf模块

1.将urdf生成slx文件 smimport(rm_65_flange.urdf);%生成Simscape物理模型 2.更换joint部分&#xff08;对应与几个输入几个输出&#xff09;&#xff08;依次更换&#xff09; 3.更改关节部分&#xff08;依次更换&#xff09; 找到urdf文件夹下的meshes文件夹&#xff0c;看…

electron实现静默打印(各种踩坑解决)

前车之鉴 也是阅读了很多资料和前人踩的坑&#xff0c;直接使用webContent.print方法进行打印。其他方式要不就是Bug多&#xff0c;官方修复也有问题&#xff1b;要不就是官方升级版本后不再支持等 不赘述 需求思路 在main里面实现printerHandle&#xff0c;暴露给渲染线程去…

基于单片机的羽毛球计分器(含proteus仿真和程序)

目录 完整文本及仿真、程序可私信我获取 前言 第一章 设计任务及方案 1.1 设计任务 1.2 总体设计分析 1.3 功能模块方案设计 1.4 方案确定 第二章、硬件设计 2.1 AT89C51 单片机芯片介绍 2.1.1 主要特性 2.1.2 管脚说明 2.1.3 元件清单 2.2 电路介绍 2…

自动化测试用例设计

知人者智&#xff0c;自知者明。大家好&#xff0c;给大家分享一下关于自动化测试用例的设计心得&#xff0c;首先完整的熟悉业务是第一步要做的&#xff0c;不熟悉业务的前提下不会设计出高效且合理的用例&#xff0c;其次是我们要有明确的测试目标&#xff0c;确保我们写的每…

Redis(单/多)线程

一、 Redis 单线程 与 多线程 怎么说&#xff1f; &#xff08;1&#xff09;重要的版本迭代 redis4 之前仅支持 单线程&#xff0c; redis 4之后慢慢 支持多线程&#xff0c; 直到redis6/7后才稳定 &#xff08;2&#xff09;redis 的 工作线程 是 单线程的 &#xff08…

阿里云难题学习笔记

1、下列内存区段增长方是向低地址方向的有&#xff08; &#xff09;&#xff1f; A: 文本段 B: 数据段 C: 堆区 D: 栈区 解析&#xff1a; 在内存管理中&#xff0c;不同的内存区段增长方向是不同的。栈区&#xff08;Stack&#xff09;的增长方向是向低地址方向的&…

Nacos和Eureka有什么区别!!!

一致性模型&#xff1a; Eureka&#xff1a;采用的是 AP&#xff08;Availability, Partition Tolerance&#xff09;模型&#xff0c;即在面临网络分区或部分节点故障时优先保证系统的可用性&#xff0c;牺牲一定的数据一致性。Eureka 通过自我保护机制&#xff0c;允许在节点…

Python构建学生信息管理系统:构建RESTful API - 学生信息管理系统的后端逻辑

在之前的博客里&#xff0c;我们已经完成了项目初始化&#xff0c;在本篇博客中&#xff0c;我们将深入探讨如何使用Flask框架实现学生信息管理系统的后端逻辑&#xff0c;特别是通过RESTful API来实现学生信息的增删改查&#xff08;CRUD&#xff09;操作。 Flask RESTful AP…

go的内存分配机制

Go 语言的内存分配机制可以分为几个主要类别&#xff0c;每个类别都有其特定的行为和优化&#xff1a; 1. 栈&#xff08;Stack&#xff09;分配 局部变量&#xff1a;在函数内部定义的变量通常分配在栈上。大小限制&#xff1a;栈的大小有限&#xff0c;适用于生命周期短、大…

C系统编程:从零手搓一个shell

背景 这么久没更新就是在干这件事&#xff01;&#xff01;因为系统编程已经学的差不多了&#xff0c;所以想找几个项目练练手&#xff0c;之前就一直想写一个自己的shell&#xff01;&#xff01;现在终于有机会实现了。 首先说明一下我的操作系统&#xff1a;Arch linux 服务…

pandas 读取JSON字符串解析长整形丢失数据精度,读取值与实际值不一致

目录 背景&#xff1a; JSON字符串 解析代码 解决方案 背景&#xff1a; 在使用pandas read_json方法读取JSON存为Excel文件时&#xff0c;发现Excel中order_no的值与JSON字符串中的值不一致&#xff0c;开始怀疑是Excel保存精度问题&#xff0c;但是Excel输出实际为字符串…

【OceanBase系列】—— 常用 SQL

作者简介&#xff1a; 花名&#xff1a;绪宁&#xff0c;OceanBase 数据库解决方案架构师 对使用OB过程中常用的一些SQL进行了整理&#xff0c;对应的版本是 4.x。 集群信息 查看版本 show variables like version_comment; 查看集群ID和集群名 show parameters like %clust…

函数的查询

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在实际使用中经常会需要查询数据库中已有的函数或者某一个函数的内容&#xff0c;下面就介绍一下如何查询函数。 和存储过程类似&#xff0c;这也需要使用到数据字典user_s…

Spring - 4 ( 11000 字 Spring 入门级教程 )

一&#xff1a;Spring IoC&DI 在前⾯的章节中, 我们学习了 Spring Boot 和 Spring MVC 的开发, 可以完成⼀些基本功能的开发了, 但是什么是 Spring 呢? Spring, Spring Boot 和 SpringMVC 又有什么关系呢? 咱们还是带着问题去学习.我们先看什么是Spring 1.1 Spring 是什…

设计模式学习笔记 - 开源实战四(下):总结Spring中用到的11种设计模式

概述 上篇文章&#xff0c;讲解了 Spring 中支持扩展功能的两种设计模式&#xff1a;观察者模式和模板模式。这两种模式帮助我们创建扩展点&#xff0c;让框架的使用者在不修改源码的情况下&#xff0c;基于扩展点定制化框架功能。 实际上&#xff0c;Spring 框架中用到的设计…

vue项目中定位组件来源的查找思路

vue项目中定位组件来源的查找思路 先去【package.json】里面看看有没有看【a】开头或者【a-】开头的插件名 例如&#xff1a;如果我不知道【el-tree】&#xff0c;先去【package.json】里面找【el】或者【el-】开头的插件名&#xff0c;结果知道了【element-ui】这样就可以直接…

更新至2022年上市公司数字化转型数据合集(四份数据合集)

更新至2022年上市公司数字化转型数据合集&#xff08;四份数据合集&#xff09; 一、2000-2022年上市公司数字化转型数据&#xff08;年报词频、文本统计&#xff09; 二、2007-2022年上市公司数字化转型数据&#xff08;年报和管理层讨论&#xff09;&#xff08;含原始数据…

微前端是如何实现作用域隔离的?

微前端是如何实现作用域隔离的&#xff1f; 一、前言 沙箱&#xff08;Sandbox&#xff09;是一种安全机制&#xff0c;目的是让程序运行在一个相对独立的隔离环境&#xff0c;使其不对外界的程序造成影响&#xff0c;保障系统的安全。作为开发人员&#xff0c;我们经常会同沙…