递增运算符(++)和递减运算符(--)辨析,C++实现:使用条件运算符从vector< int >中找到奇数然后输出奇数值翻倍后的结果

递增运算符(++)和递减运算符(–)辨析

在学习C++过程中免不了接触这种递增方式,,除了一些常规的自增运算外,由于很多迭代器本身不支持算数运算,这时候就需要用到递增和递减运算符,所以递增和递减这时不仅仅是计算起来简洁,更多的是必须的。

前置版本:++i和–i

这种形式的运算符首先将运算对象加1或减1,然后将改变后的对象作为求值结果。

后置版本:i++和i–

这种形式的运算符会将运算对象加1或减1,但是求值结果是运算对象改变之前的那个值的副本。

辨析

int i=0,j;
j=++i;//j=1,i=1
j=i++;//j=1,i=2

这两种运算符必须作用于左值运算对象,前置版本将对象本身作为左值返回,后置版本将对象原始值的副本作为右值返回。

建议:除非必须,否则不用递增或递减的后置版本

原因其实很简单,后置会在赋值的时候创建一个副本用于保存递增或递减之前的值,如果我们不需要修改之前的值,那这是一种不必要的资源浪费,一个牛逼的程序员必须要是简洁高效为主。
如果一条表达式,既想得到递增前的值,又要递增后的值,那就使用后置版本。举个栗子:

auto pbeg=v.begin();//这个例子是一个输出vector内元素,直到遇到负数停止
while(pbeg!=v.end()&&*pbeg>=0){
cout<<*pbeg++<<endl;//输出当前值,并将pbeg向前移动一个元素
}

后置运算符的优先级是高于解引用运算符的,因此* pbeg++等价于 *(pbeg++),pbeg++把pbeg加1,然后返回pbeg的初始值的副本作为其求值的结果,此时解引用运算符的运算对象是pbeg未增加之前的值。
总结一下就是后置版本返回初始的未增减的版本:
把上面那段代码写一个等价的版本如下:

cout<<*pbeg<<endl;
++pbeg;//或者pbeg=pbeg+1

使用条件运算符从vector< int >中找到奇数然后输出奇数值翻倍后的结果

#include<vector>
#include<iostream>
using namespace std;
int main(){
    vector<int> allval;
    int num;
    while (cin>>num)
    {
        allval.push_back(num);
    }
    for (decltype(allval.size()) i = 0; i < allval.size(); ++i)
    {
        (allval[i]%2==0)?allval[i] : allval[i]*=2;
    }
    for (decltype(allval.size()) j = 0; j < allval.size(); ++j)
    {
        cout<<allval[j]<<" ";
    }
    cout<<endl;
}

在这里插入图片描述
代码敲完了才发现自己有点蠢,为什么就不把cout写到第一个for里面呢,今天被阿根廷搞得太扎心了,在这也简单记录一句吧,居然能输也是真的离谱,太失望了,内心和退钱哥有的一拼。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤夜寒光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值