#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
vector<PII> segs;
int n;
void merge(vector<PII> &segs)
{
vector<PII> res;
int st = -2e9, ed = -2e9;
for (int i = 0; i < segs.size(); i++) //遍历vector的方法有点不同
{
int l = segs[i].first;
int r = segs[i].second;
if (ed < l)
{
if (st != -2e9) res.push_back({l, r}); //这个地方和y总写的有点不同
st = l, ed = r;
}
else
ed = max(ed, r);
}
if (st != -2e9) res.push_back({st, ed});
segs = res;
}
int main()
{
cin >> n;
while (n--)
{
int l, r;
cin >> l >> r;
segs.push_back({l, r});
}
sort(segs.begin(), segs.end());
merge(segs);
cout << segs.size() << endl;
return 0;
}
用迭代器写一下
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
vector<PII> segs;
int n;
void merge(vector<PII> &segs)
{
vector<PII> res;
int st = -2e9, ed = -2e9;
vector<PII>::iterator it;
for (it = segs.begin(); it< segs.end(); it++)
{
int l = (*it).first;
int r = (*it).second;
if (ed < l)
{
if (st != -2e9) res.push_back({l, r});
st = l, ed = r;
}
else
ed = max(ed, r);
}
if (st != -2e9) res.push_back({st, ed});
segs = res;
}
int main()
{
cin >> n;
while (n--)
{
int l, r;
cin >> l >> r;
segs.push_back({l, r});
}
sort(segs.begin(), segs.end());
merge(segs);
cout << segs.size() << endl;
return 0;
}
查阅官档后,总结一下:
迭代器是一种检查容器内元素并遍历元素的一种数据类型。迭代器类型提供了比下标操作更通用的方法。迭代器对所有的容器都适用,现代C++程序更倾向于适用迭代器而不是下标操作访问容器元素。
eg.
用迭代器来编写循环更加典型
提问:
遍历vector的时候,
或者写迭代器
这两种写法,有什么理论上的不同吗?
第二种写起来实在手酸
y总说的
当然很香,就是noip还不支持11,也用不起来
看看能不能@y总, @yxc
评论去的md格式,好像有更新的样子,特别的清新