《C++ primer》练习3.20:输出vector相邻元素的和&输出vector头尾对象的和

2023-11-13

最近看《C++ primer》,有这样一个题目

输出vector相邻元素的和

读入一组整数并把它们存入一个vector对象,将每对相邻整数的和输出出来。

这里要注意输入的奇数个和偶数个的数的区别。偶数个整数的话刚好数全部用完,奇数个整数最后一个数空出来,也输出出来,后面没有数了(再使用后面的索引vector就越界了)

#include <iostream>
#include <vector>
using namespace std;
int main()
{
  vector<int> ivec;
  int i;
  while (cin >> i)
    ivec.push_back(i);

  for (decltype(ivec.size()) ind = 0; ind < ivec.size(); ind = ind + 2)
  {
    if (ind == (ivec.size() - 1))
      cout << ivec[ind];
    else
      cout << ivec[ind] + ivec[ind + 1] << " ";
  }
}

测试结果

奇数输入

在这里插入图片描述
偶数输入
在这里插入图片描述
这个写法在循环里面使用了多次的if判断,如果能把if判断移到外面去可以减少比较的时间,提高速度。改写算法如下:

  • 如果输入的数是奇数个,那么ind_dmax(偶数配对最大的索引值)为vector的长度-2,比如vector有3个,索引值为0,1,2,那么0,1配对完,偶数配对最大的索引值为1(3-2),最后再输出索引值为2的整数
  • 如果输入的数是偶数个,那么ind_dmax(偶数配对最大的索引值)为vector的长度-1,比如vector有2个,索引值为0,1,那么0,1配对完,偶数配对最大的索引值为1(2-1)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
  vector<int> ivec;
  int i;
  decltype(ivec.size()) ind_dmax;
  bool flag;
  while (cin >> i)
    ivec.push_back(i);

  if (ivec.size() % 2 != 0)
  {
    flag = 1;
    ind_dmax = ivec.size() - 2;
  }
  else
  {
    flag = 0;
    ind_dmax = ivec.size() - 1;
  }

  for (decltype(ivec.size()) ind = 0; ind < ind_dmax; ind = ind + 2)
  {
    cout << ivec[ind] + ivec[ind + 1] << " ";
  }
  if (flag)
    cout << ivec[ivec.size() - 1];
}

输出vector头尾对象的和

改写你的程序,这次要求先输出第1个和最后1个元素的和,接着输出第2个和倒数第2个元素的和,以此类推。

采用同样的思路

  • 如果输入的数是奇数个,那么ind_dmax(偶数配对最大的索引值)为vector的长度/2-1,比如vector有3个,索引值为0,1,2,那么0,1配对完,配对是0和2,此时索引到(3/2-1=0)停止【C++中整形用/除不尽保留个位】,最后再输出索引值为(3/2=1)的整数
  • 如果输入的数是偶数个,那么ind_dmax(偶数配对最大的索引值)为vector的长度/2-1,比如vector有2个,索引值为0,1,配对是0和1,ci==此时索引到(2/2-1=0)停止
#include <iostream>
#include <vector>
using namespace std;
int main()
{
  vector<int> ivec;
  int i;

  bool flag;
  while (cin >> i)
    ivec.push_back(i);
  decltype(ivec.size()) ind_dmax = ivec.size() / 2 - 1;
  if (ivec.size() % 2 != 0)
  {
    flag = 1;
  }
  else
  {
    flag = 0;
  }

  for (decltype(ivec.size()) ind = 0; ind <= ind_dmax; ++ind)
  {
    cout << ivec[ind] + ivec[ivec.size() - 1 - ind] << " ";
  }
  if (flag)
    cout << ivec[ivec.size() / 2];
}

测试结果

奇数输入
在这里插入图片描述
偶数输入在这里插入图片描述
if还可以改成条件运算符,代码会更加的简洁

 if (ivec.size() % 2 != 0)
  {
    flag = 1;
  }
  else
  {
    flag = 0;
  }

改为

flag = (ivec.size() % 2 != 0) ? 1 : 0;

完整的代码:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
  vector<int> ivec;
  int i;

  bool flag;
  while (cin >> i)
    ivec.push_back(i);
  decltype(ivec.size()) ind_dmax = ivec.size() / 2 - 1;
  flag = (ivec.size() % 2 != 0) ? 1 : 0;
  for (decltype(ivec.size()) ind = 0; ind <= ind_dmax; ++ind)
  {
    cout << ivec[ind] + ivec[ivec.size() - 1 - ind] << " ";
  }
  if (flag)
    cout << ivec[ivec.size() / 2];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《C++ primer》练习3.20:输出vector相邻元素的和&输出vector头尾对象的和 的相关文章

随机推荐

  • Android postTranslate和preTranslate的理解

    matrix setScale interpolatedTime interpolatedTime matrix preTranslate centerX centerY matrix postTranslate centerX cente
  • 调用libcurl实际操作以及libcurl函数介绍

    目录 一 基本的http GET POST操作 二 头文件和库bug解决 复习 2 1找不到头文件如何解决 2 2找不到函数 2 3环境变量配置 三 libcurl函数介绍 3 1curl easy setopt函数部分选项介绍 3 2 c
  • Office Visio 2013安装

    哈喽 大家好 今天一起学习的是Visio 2013的安装 这是一个绘制流程图的软件 用有效的绘图表达信息 比任何文字都更加形象和直观 Office Visio 是office软件系列中负责绘制流程图和示意图的软件 便于IT和商务人员就复杂信
  • TokuDB性能测试报告

    作者介绍 吴双桥 腾讯云数据库工程师 本文首发腾云阁 TokuDB性能测试报告 一 背景介绍 近年来 TokuDB作为MySQL的大数据 Big Data 存储引擎受到人们的普遍关注 其架构的核心基于一种新的叫做分形树 Fractal Tr
  • 区块链技术概述

    什么是区块链 最通俗易懂的解释 哔哩哔哩 bilibili 区块链是随着比特币等数字加密货币的日益普及而逐渐兴起的一种全新的去中心化基础架构与分布式计算范式 区块链技术具有去中心化 时序数据 集体维护 可编程和安全可信等特点 特别适合构建可
  • 梅克尔树Merkle trees是什么?(以太坊)

    http www btckan com news topic 14827 梅克尔树 Merkle trees 是区块链的基本组成部分 虽说从理论上来讲 没有梅克尔树的区块链当然也是可能的 你只需创建直接包含每一笔交易的巨大区块头 block
  • 研究查阅资料所用到的网站备份

    1 liberary genesis http libgen is 免费下载各种论文 英文原版书 2 semantic scholar https www semanticscholar org 可查询英文论文的影响因子 引用信息 可根据一
  • ES6标准

    ECMAScript 6 0 以下简称 ES6 是 JavaScript 语言的下一代标准 前端es6是模块化开发 es6模块化规范就是浏览器端与服务器端通用的模块化开发规范 其中定义了每一个JavaScript文件都是一个独立的模块 导入
  • mysql 中null和default null,char和varchar,int和integer区别

    default null 和null 区别 default null 指的是 默认值为null int和integer 区别 int和integer 没有区别 char和varchar 区别 char和varchar都是用来存储字符串的 但
  • elementUI-dropdown点击非按钮区域,弹出下拉框

    如下代码 设计到的知识点 dropdown下拉框 点击按钮弹出 点击图片也要弹出 涉及到 js触发按钮点击事件 function load document getElementById target click 一行5个li 随之屏幕的宽
  • redis整体删除,整个hash删除,批量删除,单个删除,正则删除

    对于redis的hash数据结构的删除 pool redis ConnectionPool host 127 0 0 1 port 6381 db 0 decode responses True r redis Redis connecti
  • stm32通过I2C实现温湿度(AHT20)采集

    文章目录 一 环境配置 二 I2C总线通信协议 1 I2C介绍 2 I2C物理层 3 I2C协议层 4 软件IIC和硬件IIC 三 实现AHT20采集程序 1 硬件连接 2 代码实现 四 效果展示 五 总结 六 参考资料 一 环境配置 软件
  • 【LeetCode刷题】 27 移除元素 -java

    题目 给你一个数组 nums 和一个值 val 你需要 原地 移除所有数值等于 val 的元素 并返回移除后数组的新长度 不要使用额外的数组空间 你必须仅使用 O 1 额外空间并 原地 修改输入数组 元素的顺序可以改变 你不需要考虑数组中超
  • Axure插件axure-chrome-extension安装

    chrome浏览器打开axure生成的HTML静态文件页面预览打开如下图显示 这是因为chrome浏览器没有安装Axure插件axure chrome extension导致的 方式一 先下载Axure谷歌浏览器插件 然后在浏览器中添加扩展
  • 使用charles map remote host

    应用场景 a 某个后端Dev在他本地分支有一些代码改动 Bug fix 在未部署的情况下 通过remote map可以提前测试验证其个人分支 b APP进入prod测试阶段 有一些H5页面Prod环境一经部署会直接影响线上用户 因此H5 前
  • 锤子手机系统位置服务器,两种锤子系统安装方法【图文详解】

    很多用安卓手机的人都知道 锤子 系统界面和其他 苹果 和安卓系统的界面是不一样的 锤子 系统界面应用在安卓手机上显示的是重新画的应用图标 整体上还是很好看的 完全比的上苹果系统界面 大家如果看烦了安卓原桌面不防去刷个锤子系统来玩玩 下面我告
  • [python学习笔记] - Pandas的SettingwithCopy分析

    警告信息 当我尝试修改dataframe或者对其赋值时 出现了警告信息 A value is trying to be set on a copy of a slice from a DataFrame Try using loc row
  • grafana导入prometheus

    grafana 简介 grafana是用于可视化大型测量数据的开源程序 他提供了强大和优雅的方式去创建 共享 浏览数据 dashboard中显示了你不同metric数据源中的数据 Grafana是一个开源的 拥有丰富dashboard和图表
  • 3D变形几何体匹配

    文章目录 Halcon 3D匹配之变形几何体匹配 算子说明 1 变形几何体匹配过程中 需要指定参考点 作为变形体匹配参考 2 将示例的形变特征添加到可变性几何体上 3 将刚性几何体转变为可变性几何体 曲面 4 在3D场景中找到一个可变性几何
  • 《C++ primer》练习3.20:输出vector相邻元素的和&输出vector头尾对象的和

    最近看 C primer 有这样一个题目 输出vector相邻元素的和 读入一组整数并把它们存入一个vector对象 将每对相邻整数的和输出出来 这里要注意输入的奇数个和偶数个的数的区别 偶数个整数的话刚好数全部用完 奇数个整数最后一个数空