三目闭坑指南
三目运算符的优先级比逗号还高!!!所以如果你是这么写的:
#include <bits/stdc++.h>
using namespace std;
priority_queue<int, vector<int>, greater<int>> gq;
priority_queue<int, vector<int>, less<int>> lq;
int n, x;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> x;
lq.push(x);
cout << x << '\n';
for (int i = 2; i <= n; i++)
{
cin >> x;
x > lq.top() ? gq.push(x) : lq.push(x);
while (labs(lq.size() - gq.size()) > 1)
lq.size() > gq.size() ? gq.push(lq.top()), lq.pop() : lq.push(gq.top()), gq.pop();
if (i & 1)
cout << (lq.size() > gq.size() ? lq.top() : gq.top()) << '\n';
}
return 0;
}
请改成:
#include <bits/stdc++.h>
using namespace std;
priority_queue<int, vector<int>, greater<int>> gq;
priority_queue<int, vector<int>, less<int>> lq;
int n, x;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> x;
lq.push(x);
cout << x << '\n';
for (int i = 2; i <= n; i++)
{
cin >> x;
x > lq.top() ? gq.push(x) : lq.push(x);
while (labs(lq.size() - gq.size()) > 1)
lq.size() > gq.size() ? (gq.push(lq.top()), lq.pop()) : (lq.push(gq.top()), gq.pop()); //加括号!!
if (i & 1)
cout << (lq.size() > gq.size() ? lq.top() : gq.top()) << '\n';
}
return 0;
}
因为如果这么写:
cmp ? a, b: c, d;
实际上和这个是等效的:
cmp ? a;
b: c;
d;
未定义行为了属于是(