请将此代码转成c++98编译器兼容的形式
时间: 2024-04-15 21:26:09 浏览: 17
好的,我将代码修改为与C++98编译器兼容的形式。主要更改的地方是使用传统的for循环替代了C++11中的范围for循环,以及将auto关键字替换为具体的类型。
```cpp
#include <iostream>
#include <vector>
#include <cmath>
#include <limits>
#include <algorithm>
using namespace std;
struct Edge {
int source;
int target;
double weight;
};
bool arbitrage(int n, vector<string>& currencies, vector<Edge>& edges) {
vector<double> distance(n, numeric_limits<double>::max());
distance[0] = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < edges.size(); j++) {
double newDistance = distance[edges[j].source] - log(edges[j].weight);
if (newDistance < distance[edges[j].target]) {
distance[edges[j].target] = newDistance;
}
}
}
for (int i = 0; i < edges.size(); i++) {
if (distance[edges[i].source] - log(edges[i].weight) < distance[edges[i].target]) {
return true;
}
}
return false;
}
int main() {
int n;
while (cin >> n && n != 0) {
vector<string> currencies(n);
for (int i = 0; i < n; i++) {
cin >> currencies[i];
}
int m;
cin >> m;
vector<Edge> edges;
for (int i = 0; i < m; i++) {
string ci, cj;
double rij;
cin >> ci >> rij >> cj;
int source = find(currencies.begin(), currencies.end(), ci) - currencies.begin();
int target = find(currencies.begin(), currencies.end(), cj) - currencies.begin();
edges.push_back(Edge());
edges[i].source = source;
edges[i].target = target;
edges[i].weight = rij;
}
bool result = arbitrage(n, currencies, edges);
cout << (result ? "Yes" : "No") << endl;
}
return 0;
}
```
这样,代码就与C++98编译器兼容了。如果还有其他问题,请随时提问。