我非常擅长C ++ 11并了解STL库。我写了一个像这样的代码,
#include <bits/stdc++.h>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
void Print( const vector<int> &arrays )
{
for ( int x : arrays ) cout << x << ' ';
}
int main() {
int citys, cityPairs, fv, lv, w;
vector <int> fvarr;
vector <int> lvarr;
vector <int> warr;
vector <int> warr_temp;
vector <int> disjoint_pairs;
scanf("%d%d", &citys, &cityPairs);
for(int nr = 0; nr < cityPairs; nr++){
scanf("%d%d%d", &fv, &lv, &w);
fvarr.push_back(fv);
lvarr.push_back(lv);
warr.push_back(w);
warr_temp = warr;
}
for (int j = 0; j < citys; j++){
auto result = min_element(begin(warr_temp), end(warr_temp));
auto pos_temp = distance(begin(warr_temp), result);
cout << pos_temp;
auto pos = distance(begin(warr), result);
cout << pos;
disjoint_pairs.push_back(fvarr[pos]);
disjoint_pairs.push_back(lvarr[pos]);
warr_temp.erase(warr_temp.begin() + pos_temp);
}
// Print(disjoint_pairs);
}
我在这段代码中正在做的是我正在使用3个向量和1个向量来复制最后一个warr_temp = warr;
。然后我检查向量warr_temp
中的最小值并将其索引存储在pos_temp
中,然后我将该值的最小值索引从向量warr
存储到pos
。
现在问题是第一个cout
pos_temp
给了我正确的值,但第二个是pos
给我这样的输出,
-61-62-63-64
为什么会这样?这些数字是多少?他们是指针吗?我知道距离是一个模板,所以实现这个的正确方法是什么?
如果有人能够清除我的怀疑那将是非常有帮助的。 对不起愚蠢的问题!!!
答案 0 :(得分:1)
问题的根本原因是auto pos = distance(begin(warr), result);
行。它会产生不可预测的结果,因为result
和begin(warr)
属于不同的向量。
result
是指向warr_temp
元素的迭代器,它不能与指向warr
元素的begin(warr)
元素的迭代器混合。
要在warr
向量中获取元素位置,请改为使用std::find(begin(warr), end(warr), *result)
:
auto warr_res = std::find(begin(warr), end(warr), *result);
auto pos = distance(begin(warr), warr_res);