【问题标题】:I can not cout equal range我无法计算出相等的范围
【发布时间】:2020-07-31 12:25:14
【问题描述】:

所以我有这段代码,我在其中打印下限、上限和相等范围,但是如果有人知道我希望如何提交编码解决方案,IDK 如何打印相等范围,谢谢

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;
typedef vector<long long> vi;
typedef pair<long long,long long> pi;
typedef vector<pi> vpi;

#define FOR(i, a, b) for(ll i=ll(a); i<ll(b); i++)
#define ROF(i, a, b) for(ll i=ll(a); i>=ll(b); i--)
#define f first
#define s second
#define pb emplace_back
#define mp make_pair
#define SQ(a) (a)*(a)
#define all(a) (a).begin(), (a).end()

int main() {
    ll n,x=6,s;
    cin>>n;

vi ar;

FOR(i,0,n)cin>>s; ar.pb(s);

auto a = lower_bound(all(ar), x)-ar.begin();

auto b = upper_bound(all(ar), x)-ar.begin();

auto c = equal_range(all(ar), x);

cout<<"lower_bound "<<a<<' '<<"upper_bound"<<' '<<b<<' '<<"equal range.first"<<' '<<c.f<< ' '<<"equal range.second"<<' '<<c.s<<"\n";
    return 0;
}

【问题讨论】:

  • 你知道为什么要减去ar.begin()ab吗?
  • 请不要使用宏作为缩写。如果您需要缩写,请参加键盘输入课程。缩写宏使阅读代码更加困难,不会加快构建时间,也不会加快执行时间。
  • 当我对自动 c 做同样的事情时,我没有,但仍然如此;或 c.f,c.s 单独它不会工作
  • 您可能想在International Obfuscated Code Contest 中查找混淆代码的示例以获取不可读代码的示例。
  • 那么停止cargo cult programming,你就不会有这个问题了。这是一个为什么你不应该使用你不理解的代码的例子。了解迭代器的工作原理。

标签: c++ c++11 vector iterator equal-range


【解决方案1】:

如果我理解正确,那么您的意思是以下

cout << "lower_bound " << a <<' '
     << "upper_bound " <<' '<< b <<' '
     << "equal range.first " << ' ' << c.f - ar.begin() << ' '
     << "equal range.second" << ' ' << c.s - ar.begin() << "\n";

注意那个而不是像这样的表达

c.f - ar.begin()

最好使用标头&lt;iterator&gt;中声明的标准函数std::distance。例如

std::distance( ar.begin(), c.f )

请记住,引入隐藏众所周知的标准结构和标识符的宏是一种糟糕的编程风格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多