【发布时间】:2023-03-15 15:40:01
【问题描述】:
我尝试了以下代码,但找不到错误。错误在循环部分,但我不知道如何正确使用迭代器以避免错误。 请帮助,并请澄清我的概念。 问题陈述是https://codeforces.com/contest/268/problem/A。我已经通过向量解决了
int main()
{
std::ios::sync_with_stdio(false);
int n,x,y,count=0; cin>>n;
std::vector<pair<int,int>> v;
for (int i = 0; i < n; ++i)
{
cin>>x>>y;
v.push_back(make_pair(x,y));
}
for (int i = 0; i < n; ++i)
{
for (int j=i+1; j < n; ++j)
{
if(v[i].f==v[j].s){
count++;
}
if(v[i].s==v[j].f){
count++;
}
}
}
cout<<count;
return 0;
}
但通过地图遇到问题。 使用地图时会出现 SIGTSTP 错误。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::make_pair;
int main() {
std::ios::sync_with_stdio(false);
int n, x, y, count = 0;
cin >> n;
std::map<int, int> m;
for (int i = 0; i < n; ++i) {
cin >> x >> y;
m.insert(make_pair(x, y));
}
for (auto i = m.begin(); i != m.end(); ++i) {
for (auto j = ++i; j != m.end(); ++j) {
if (i->first == j->second) {
count++;
}
if (i->second == j->first) {
count++;
}
}
}
cout << count;
return 0;
}
【问题讨论】:
-
错误是什么?请在您的问题中添加任何错误消息或意外输出(带有相应的输入)。点击edit 这样做。
-
这个程序的目的是什么?
-
你在双倍递增
i。我的意思是,++i将始终在每次 outer 循环迭代之后执行,and 在每个内部循环初始设置上执行。这意味着您最终可以将i放在m.end()使用内循环初始化,然后尝试在下一次外循环迭代的增量步骤中进一步碰撞它(发生在比较测试之前),那个碰撞-过去端调用UB。我怀疑将内部循环初始化设置更改为auto j = std::next(i)会满足您的要求,但没有解释代码的总体目的,这是一个完整的水晶球猜测。 -
我已经添加了相关信息,请查看并帮助。
标签: c++ c++11 stl iterator c++14