经典i++和++i问题(附带运算符优先级问题)

本文详细解释了i++和++i的区别,前者先使用i的值后自增,后者先自增后使用。并通过典型例题展示了不同情况下的应用。此外,还介绍了运算符优先级对程序运行结果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.i++和++i的区别

    (1)i++简单来说就是先用i的值来参加表达式的计算,然后再自加1
                i=4;
                a=i++;        //此时,先做a=i=4,再做i++,故a=4,i=5
    (2)++i则是先自增1,再用自加后的值来做运算。
                i=4;
                a=++i;         //此时,先做++i,i=i+1=5,再做a=i=5,故a=5,i=5
2.运算符的优先级

               

    *典型例题1 (比较下面两个代码输出结果的不同)
    程序1:
          
    程序2:
          
    *典型例题2(输出程序结果)
         
          该程序分别输出:
          7
          8,8
          (1)首先指针ptr指向数组arr的arr[0]=6
          (2)*(ptr++)+=123,先执行*(ptr)+=123,相加结果为129,再执行自加1,此时*ptr指向arr[1]
          (3)printf此时的指针ptr,即打印arr[1]的值,故为7
          (4)在执行下一句printf时,因为‘()’,‘++’的优先级均高于‘,’所以指针ptr会先自增1,故指向arr[2]=8
### C++ STL 经典编程题目与习题 以下是几个经典的 C++ STL 编程题目及其解析: #### 1. **大小写转换** 通过 `set` 实现单词去重功能,并利用 `tolower()` 函数完成字母的小写化处理。此问题的核心在于掌握如何使用集合容器以及字符操作函数。 ```cpp #include <bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; set<string> st; for(int i = 1; i <= n; ++i){ int opt; string word; cin >> opt >> word; if(opt == 0){ for(int j = 0; j < word.length(); ++j){ word[j] = tolower(word[j]); } st.insert(word); } else { if(st.count(word)){ cout << "Yes" << endl; } else{ cout << "No" << endl; } } } return 0; } ``` 这段代码展示了如何使用 `std::set` 来存储唯一的字符串并判断是否存在某个特定的词[^1]。 --- #### 2. **约瑟夫环问题** 这是一个典型的队列应用案例,用于解决循环淘汰类的问题。程序模拟了一个简单的酒桌游戏场景,其中玩家按顺序报数直到某个人被淘汰为止。 ```cpp #include <bits/stdc++.h> using namespace std; int main(){ int n, m; cin >> n >> m; queue<int> q; for(int i = 1; i <= n; i++) q.push(i); int j = 1; while(q.size() != 1){ if(j % m == 0) q.pop(); else{ q.push(q.front()); q.pop(); } j++; } cout << q.front(); return 0; } ``` 上述实现方式简洁明了地解决了约瑟夫环问题,体现了标准模板库中 `queue` 容器的强大之处[^2]。 --- #### 3. **消息队列管理** 本题涉及优先级队列的应用,要求根据给定指令动态调整消息列表中的元素次序。具体来说,“PUSH” 命令需附带数据项对应的权重值;而每次执行 “POP”,应返回当前最高优先级的消息内容或者默认提示符 `"NULL!"` 若无任何待处理项目存在的话。 ```cpp #include <bits/stdc++.h> using namespace std; struct Message { string data; int priority; }; bool operator<(const Message& a, const Message& b){ if(a.priority != b.priority) return a.priority < b.priority; return true; } priority_queue<Message> pq; int main(){ string cmd; while(cin >> cmd){ if(cmd == "PUSH"){ string str; int pri; cin >> str >> pri; pq.push(Message{str, pri}); } else if(cmd == "POP"){ if(pq.empty()) cout << "NULL!\n"; else{ cout << pq.top().data << "\n"; pq.pop(); } } } return 0; } ``` 这里运用到了自定义比较运算符来控制堆内部节点排列逻辑,从而满足业务需求关于不同等级间相对位置安排的规定[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值